🎉 Try the public beta of the new docs site at algolia.com/doc-beta! 🎉
Integrations / WordPress

Indexing other types of content

Algolia doesn’t provide support for WordPress or any WordPress plugin.

The plugin indexes posts, but you may want to index other types of content from your WordPress instance. To do so, you can adapt your existing reindex_post function to index any post type.

Indexing post types

You want to adapt the reindex_post function so you can pass it --type argument. You can use the passed value in the function instead of the hard-coded “post” value. You can also set the index name using your algolia_index_name filter, and dynamically pick the transform filter based on post type to convert the content into Algolia records.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public function reindex_post($args, $assoc_args) {
    global $algolia;
    global $table_prefix;

    $type = isset($assoc_args['type']) ? $assoc_args['type'] : 'post';

    $indexName = $table_prefix.$type;
    $index = $algolia->initIndex(
        apply_filters('algolia_index_name', $indexName, $type)
    );
    $index->clearObjects()->wait();

    $paged = 1;
    $count = 0;

    do {
        $posts = new WP_Query([
            'posts_per_page' => 100,
            'paged' => $paged,
            'post_type' => $type,
            'post_status' => 'publish',
        ]);

        if (!$posts->have_posts()) {
            break;
        }

        $records = [];

        foreach ($posts->posts as $post) {
            if (!empty($assoc_args['verbose'])) {
                WP_CLI::line('Indexing ['.$post->post_title.']');
            }
            $record = (array) apply_filters($type.'_to_record', $post);

            if (! isset($record['objectID'])) {
                $record['objectID'] = implode('#', [$post->post_type, $post->ID]);
            }

            $records[] = $record;
            $count++;
        }

        $index->saveObjects($records);

        $paged++;

    } while (true);

    WP_CLI::success("$count $type entries indexed in Algolia");
}

Indexing terms

To index terms, you can add a new public reindex_terms method in your main Algolia_Command class to create a wp algolia reindex_terms command. You can start from the reindex_post code and adapt it to index terms instead of posts.

Posts and terms have a different structure and live in different tables in your database. The logic might be similar, but you should handle them with two separate methods.

Did you find this page helpful?