Algolia - Wordpress - 从索引中排除类别

时间:2016-07-28 06:54:55

标签: wordpress algolia

如何排除某些WordPress页面类别在Algolia中被编入索引?

1 个答案:

答案 0 :(得分:7)

首先,我建议您坚持使用新版本的插件。在撰写本文时,最新版本为0.2.5。实际上旧版本(0.0.1)将不再受支持。

关于您的问题,确实可以过滤您希望推送到Algolia的帖子并进行搜索。

我从您的问题中了解到,您已将网页分配到类别,并且您希望避免在搜索结果中显示某些类别的网页。如果这些初始陈述有误,请对此答案发表评论,我很乐意推动更新!

您可以使用WordPress过滤器来决定索引帖子。 在您的情况下,如果您愿意从searchable_posts索引中排除页面,则可以使用algolia_should_index_searchable_post过滤器。 如果您愿意从posts_page索引中排除页面,则可以使用algolia_should_index_post过滤器。

以下是如何排除由其ID标识的类别列表的所有页面的示例。

<?php
    // functions.php of your theme
    // or in a custom plugin file.

    // We alter the indexing decision making for both the posts index and the searchable_posts index. 
    add_filter('algolia_should_index_post', 'custom_should_index_post', 10, 2);
    add_filter('algolia_should_index_searchable_post', 'custom_should_index_post', 10, 2);


    /**
     * @param bool    $should_index
     * @param WP_Post $post
     *
     * @return bool
     */
    function custom_should_index_post( $should_index, WP_Post $post ) {
        // Replace these IDs with yours ;)
        $categories_to_exclude = array( 7, 22 );

        if ( false === $should_index ) {
            // If the decision has already been taken to not index the post
            // stick to that decision.
            return $should_index;
        }

        if ( $post->post_type !== 'page' ) {
            // We only want to alter the decision making for pages.
            // We we are dealing with another post_type, return the $should_index as is.
            return  $should_index;
        }


        $post_category_ids = wp_get_post_categories( $post->ID );
        $remaining_category_ids = array_diff( $post_category_ids, $categories_to_exclude );
        if ( count( $remaining_category_ids ) === 0 ) {
            // If the post is a page and belongs to an excluded category,
            // we return false to inform that we do not want to index the post.
            return false;
        }

        return $should_index;
    }

有关为WordPress扩展Algolia Search插件的更多信息,请访问documentation: Basics of extending the plugin

<强>更新

代码已更新,以确保如果产品与多个类别关联且不排除所有类别,则不会排除该产品。