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

时间:2016-08-11 11:04:14

标签: wordpress faceted-search

我正在一个网站上工作,我的帖子有多个类别和子类别分配给他们。现在我想使用FacetWP为用户提供在其类别和子类别中搜索这些帖子的选项。我想让它像以下例子一样工作。

假设一篇帖子分配了以下类别:

France  - Paris   - River
                  - Street
        - Lyon    - Street
                  - House
Germany - Hamburg - Street
        - Berlin  - House
                  - Church

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

所以,当有人选择法国时,下一个下拉列表应该只显示巴黎和里昂(不是汉堡和柏林)。当巴黎被选中时,下一个下拉列表应该只显示River and Street(不是House或Church)

FacetWP可以实现吗?或者有没有办法调整它以使其成为可能?

1 个答案:

答案 0 :(得分:1)

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

然后您必须使用facetwp_facet_html过滤器。

以下是一个示例,我使用select2 facet

```

function fwp_limit_subcategory( $output, $params ) {

  $facet = $params['facet'];
  if ($facet['type'] != 'select2') { return $output; }

  $custom_out = $out = '';
  $exploded = explode('<option', $output);


if ( 'subcategory' == $facet['name'] ) {

    // See if a category is selected
    foreach ( FWP()->facet->facets as $f ) {

        if ( 'category' == $f['name'] && empty( $f['selected_values'] ) ) {
          return $exploded[0].'</select>';
        }

        if ( 'category' == $f['name'] && ! empty( $f['selected_values'] ) ) {

            $term_slugs = $f['selected_values'];

            foreach($term_slugs as $term_slug) {

              $term = get_term_by( 'slug', $term_slug, 'category' );
              if ( isset( $term->term_id ) ) {

                  $get_terms = get_terms(
                    array(
                      'parent' => $term->term_id, 
                      'taxonomy' => 'category',
                      'hierarchical' => true
                    )
                  );
                  foreach ($exploded as $opt) {
                    foreach($get_terms as $child) {
                      if (strpos($opt, $child->slug) !== false) {
                        $custom_out .= '<option '. $opt;
                      }
                    }

                  }



              }
            }

        }
    }
  }
}

if ($custom_out != '') { 
  $out .= $exploded[0].$custom_out;
  if (strpos($out, '</select>') === false) {
    $out .= '</select>';
  }
  return $out; 


return $output;

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

```

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

修改

我发现了一个可能也有帮助的其他解决方案。

  1. Index top only categories in one facet
  2. Index child only categories in another facet
  3. Tweak the results of the second facet according to the result of the first one
  4. 重复第三,第四方面等