0

我正在一个网站上工作,我的帖子分配了多个类别和子类别。现在我想使用 FacetWP 让用户可以选择在他们的类别和子类别中搜索这些帖子。我希望它像以下示例一样分层工作。

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

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

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

因此,当有人选择法国时,下一个下拉菜单应该只显示巴黎和里昂(而不是汉堡和柏林)。选择巴黎后,下一个下拉菜单应仅显示 River 和 Street(不包括 House 或 Church)

FacetWP可以做到这一点吗?或者有没有办法对其进行调整以使其成为可能?

4

1 回答 1

1

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

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

这是一个示例,我使用select2 方面

```

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. 仅索引一个方面的顶级类别
  2. 在另一个方面仅索引子类别
  3. 根据第一个方面的结果调整第二个方面的结果
  4. 重复第三,第四方面等
于 2016-11-29T03:07:17.130 回答