我正在一个网站上工作,我的帖子有多个类别和子类别分配给他们。现在我想使用FacetWP为用户提供在其类别和子类别中搜索这些帖子的选项。我想让它像以下例子一样工作。
假设一篇帖子分配了以下类别:
France - Paris - River
- Street
- Lyon - Street
- House
Germany - Hamburg - Street
- Berlin - House
- Church
现在我想创建下拉方面,我希望第一个下拉列表仅提供主要类别(本例中为国家/地区)。在此之后,当某人选择了某个国家/地区时,我希望第二个下拉列表仅显示该特定国家/地区的子类别(本例中为城市)。之后,我希望下一个下拉列表只显示子子类别。
所以,当有人选择法国时,下一个下拉列表应该只显示巴黎和里昂(不是汉堡和柏林)。当巴黎被选中时,下一个下拉列表应该只显示River and Street(不是House或Church)
FacetWP可以实现吗?或者有没有办法调整它以使其成为可能?
答案 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 );
```
我希望这能帮助你,让你走上正轨。
修改强>
我发现了一个可能也有帮助的其他解决方案。