如何使用Algolia Search for Wordpress基于分面属性的值过滤掉某些结果?

时间:2016-11-17 20:29:28

标签: wordpress search conditional filtering algolia

我试图在Wordpress中的Algolia分面搜索中过滤掉一些结果。我想仅向使用特定WP用户角色登录的用户显示某些结果。这是我现在的结果,它没有返回任何结果,但搜索的分页确实显示,所以我知道脚本运行没有错误。我也没有任何控制台错误。

这是我目前来自instantsearch.php的脚本:

<script type="text/html" id="tmpl-instantsearch-hit">
    <article itemtype="http://schema.org/Article">

        <?php
        // Get data
        $post_title = '{{{ data._highlightResult.post_title.value }}}';
        $aim_of_work = '{{{ data._snippetResult.aim_of_organisations_work.value }}}';
        $organisation_region = '{{{ data._highlightResult.organisation_region.value }}}';
        ?>

        <?php 
        // If user is limited to Americas and the Carribbean
        if( in_array('americas', $user_info->roles) ) {

            if($organisation_region == 'Americas and the Caribbean') { ?>

                <!-- Print Americas Results -->
                <div class="ais-hits--content">
                    <h3 itemprop="name headline"><a href="{{ data.permalink }}" title="{{ data.post_title }}" itemprop="url"><?php echo $post_title; ?></a></h3>
                    <div class="ais-hits--tags">
                        <# for (var index in data.taxonomies.post_tag) { #>
                        <span class="ais-hits--tag">{{{ data._highlightResult.taxonomies.post_tag[index].value }}}</span>
                        <# } #>
                    </div>
                    <div class="excerpt">
                        <p>
                            <?php echo $aim_of_work; ?>...
                        </p>
                        <p class="text-small">Region: <?php echo $organisation_region; ?></p>
                    </div>
                </div>
                <div class="ais-clearfix"></div>


            <?php } //END if

        } else { ?>

            <!-- Print All Results -->
            <div class="ais-hits--content">
                <h3 itemprop="name headline"><a href="{{ data.permalink }}" title="{{ data.post_title }}" itemprop="url"><?php echo $post_title; ?></a></h3>
                <div class="ais-hits--tags">
                    <# for (var index in data.taxonomies.post_tag) { #>
                    <span class="ais-hits--tag">{{{ data._highlightResult.taxonomies.post_tag[index].value }}}</span>
                    <# } #>
                </div>
                <div class="excerpt">
                    <p>
                        <?php echo $aim_of_work; ?>...
                    </p>
                    <p class="text-small">Region: <?php echo $organisation_region; ?></p>
                </div>
            </div>
            <div class="ais-clearfix"></div>

        <?php } // END if ?>
    </article>
</script>

我担心的是我的条件不起作用:if($organisation_region == 'Americas and the Caribbean')

我觉得有更好的方法可以做到这一点,但我会采取任何可行的方式。

/ ** - 更新 - * / 这是我的方面小部件:

/* Region refinement widget */
search.addWidget(
    instantsearch.widgets.menu({
        container: '#facet-org-region',
        attributeName: 'organisation_region',
        sortBy: ['isRefined:desc', 'count:desc', 'name:asc'],
        limit: 10,
        templates: {
            header: '<h3 class="widgettitle">Region</h3>'
        }
    })
);

1 个答案:

答案 0 :(得分:2)

您的解决方案似乎将JavaScript代码与PHP混合在一起。

在服务器端解析和执行PHP代码,在浏览器中解析客户端的JavaScript。

在您的示例中,$organisation_region将始终等于字符串'{{{ data._highlightResult.organisation_region.value }}}'

您可能希望将organisation_region添加为构面,然后对其进行优化。

为实现这一目标,您可以查看其中如何实施其他方面https://community.algolia.com/wordpress/customize-search-page.html

此外,以下是注册自定义方面的方法:https://community.algolia.com/wordpress/indexing-settings.html#register-custom-facet