首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用FacetWP搜索类别分支?

如何使用FacetWP搜索类别分支?
EN

Stack Overflow用户
提问于 2016-08-11 11:04:13
回答 1查看 2.9K关注 0票数 1

我在一个网站上工作,在那里我有多个类别和子类别分配给他们的帖子。现在,我想使用FacetWP为用户提供在他们的类别和子类别上搜索这些帖子的选项。我希望它可以像下面的示例那样按层次工作。

假设有一个职位被分配给它以下类别:

代码语言:javascript
复制
France  - Paris   - River
                  - Street
        - Lyon    - Street
                  - House
Germany - Hamburg - Street
        - Berlin  - House
                  - Church

现在我想创建下拉方面,我希望第一个下拉列表只提供主要类别(本例中的国家)。在那之后,当有人选择了一个国家,我希望第二个下拉列表只显示该特定国家的子类别(本例中的城市)。在那之后,我希望下一个下拉列表只显示子类别。

因此,当有人选择法国时,下一个下线应该只显示巴黎和里昂(而不是汉堡和柏林)。当巴黎被选中时,下一个下拉线应该只显示河流和街道(也不是房子或教堂)。

这与FacetWP是可能的吗?还是有办法调整它,使之成为可能?

EN

回答 1

Stack Overflow用户

发布于 2016-11-29 03:07:17

您必须创建3个方面,每个类别级别一个。

然后,您将不得不使用facetwp_facet_html过滤器。

下面是一个示例,其中我使用了select2小面

代码语言:javascript
复制
```javascript

函数fwp_limit_subcategory( $output,$params ){

$facet =$params‘’facet‘;

如果($facet‘’type‘!= 'select2') {返回$output;}

$custom_out = $out = '';

$exploded =(<选项,$output);

如果(‘子类别’== $facet‘’name‘){

代码语言:javascript
复制
// See if a category is selected
代码语言:javascript
复制
foreach ( FWP()->facet->facets as $f ) {
代码语言:javascript
复制
    if ( 'category' == $f['name'] && empty( $f['selected_values'] ) ) {
代码语言:javascript
复制
      return $exploded[0].'</select>';
代码语言:javascript
复制
    }
代码语言:javascript
复制
    if ( 'category' == $f['name'] && ! empty( $f['selected_values'] ) ) {
代码语言:javascript
复制
        $term_slugs = $f['selected_values'];
代码语言:javascript
复制
        foreach($term_slugs as $term_slug) {
代码语言:javascript
复制
          $term = get_term_by( 'slug', $term_slug, 'category' );
代码语言:javascript
复制
          if ( isset( $term->term_id ) ) {
代码语言:javascript
复制
              $get_terms = get_terms(
代码语言:javascript
复制
                array(
代码语言:javascript
复制
                  'parent' => $term->term_id, 
代码语言:javascript
复制
                  'taxonomy' => 'category',
代码语言:javascript
复制
                  'hierarchical' => true
代码语言:javascript
复制
                )
代码语言:javascript
复制
              );
代码语言:javascript
复制
              foreach ($exploded as $opt) {
代码语言:javascript
复制
                foreach($get_terms as $child) {
代码语言:javascript
复制
                  if (strpos($opt, $child->slug) !== false) {
代码语言:javascript
复制
                    $custom_out .= '<option '. $opt;
代码语言:javascript
复制
                  }
代码语言:javascript
复制
                }
代码语言:javascript
复制
              }
代码语言:javascript
复制
          }
代码语言:javascript
复制
        }
代码语言:javascript
复制
    }
代码语言:javascript
复制
}

}

}

if ($custom_out != '') {

$out .= $exploded.$custom_out;

if (strpos($out,'') === false) {

代码语言:javascript
复制
$out .= '</select>';

}

返回$out;

返回$output;

}

add_filter( 'facetwp_facet_html','fwp_limit_subcategory',10,2 );

代码语言:javascript
复制

我希望这能帮到你,让你走上正轨。

编辑

我发现了一种可能也有帮助的额外解决方案。

  1. 仅在一个方面中索引顶级类别
  2. 在另一个方面中只索引子类别
  3. 根据第一个方面的结果调整第二个方面的结果。
  4. 重复第三、第四面等
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38894586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档