Integrations / WordPress

Indexing other types of content

For now, the plugin indexes posts, but you may want to index other types of content from your WordPress instance. To do so, you can leverage post types.

Indexing post types

You can adapt your existing reindex_post function to index any post type.

First, you want to adapt the command 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 it’s recommended to handle them with two separate methods.

Did you find this page helpful?