Integrations / Platforms / WordPress / Serializing Content

Serializing Content

In the previous section, we defined a new post_to_record filter in the reindex_post method, which you can use to define how to convert a post into a record before sending it to Algolia.

You technically could define how to serialize posts in the plugin. However, since some content depends on the theme (e.g., thumbnail size), it might be a better idea to do it directly in the theme. It also works better because most themes with custom post types embed that feature in the theme, not in a separate plugin.

We highly recommend creating a child theme instead of modifying the original theme directly. This way, you can keep on installing updates.

Converting posts into records

In your theme’s functions.php file, you can define a new function and add it to your new WordPress filter.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function algolia_post_to_record(WP_Post $post) {
    $tags = array_map(function (WP_Term $term) {
        return $term->name;
    }, wp_get_post_terms($post->ID, 'post_tag'));

    return [
        'objectID' => implode('#', [$post->post_type, $post->ID]),
        'title' => $post->post_title,
        'author' => [
            'id' => $post->post_author,
            'name' => get_user_by('ID', $post->post_author)->display_name,
        ],
        'excerpt' => $post->post_excerpt,
        'content' => strip_tags($post->post_content),
        'tags' => $tags,
        'url' => get_post_permalink($post->ID),
        'custom_field' => get_post_meta($post->id, 'custom_field_name'),
    ];
}
add_filter('post_to_record', 'algolia_post_to_record');

The above example is a naive implementation that performs many SQL queries. It won’t be an issue in most cases but could become one if you have thousands of posts. In this case, make sure to adapt the function.

Handling long articles

If you have long articles, you might hit the allowed size limit per Algolia record. This limit exists for relevance and performance reasons.

If you hit this limit and get an error, please refer to the advanced guide to see how to split your content into several records.

Did you find this page helpful?