我在WooCommerce书店网站上工作taxonomy.php
根据名为“突出显示”的类别生成不同存档页的模板。因此,例如,有一个“畅销书”归档页,对应于/books/product-category/highlights/best-sellers/
, 制作一份分配给“畅销书”子类别“亮点”的产品列表。在这些归档页面上,我想包括一个过滤器,通过一个称为“主题”的不同类别(普通WP类别,而不是自定义分类法)来微调这些产品列表。为了让事情进展顺利,我一直在努力$_GET
参数工作,因此/highlights/best-sellers/?topic=art
将展示该类别的畅销书。
我最初尝试使用pre_get_posts
无效,然后尝试使用筛选器woocommerce_product_query_tax_query
a已描述here. 我一直在尝试的具有各种操作/过滤器的函数如下:functions.php
:
function filter_product_topic($query) {
if( is_admin() ) return;
if( !$query->is_main_query() ) return;
$tax_query = $query->get(\'tax_query\');
if( isset($_GET[\'topic\']) ) {
$tax_query[] = array(
\'taxonomy\' => \'topic\',
\'field\' => \'slug\',
\'terms\' => $_GET[\'topic\'],
\'include_children\' => true,
\'operator\' => \'IN\'
);
}
$query->set(\'tax_query\', $tax_query);
}
基本上,我最终希望通过过滤器有选择地调用这个额外的查询参数,以进一步优化归档结果。因此,选中“艺术”框将以这种方式优化归档结果。有人知道我怎么做吗?感谢您的帮助!
SO网友:honk31
您需要添加topic
查询\\u vars。
function so306156_add_query_vars_filter($vars)
{
$vars[] = "topic";
return $vars;
}
add_filter(\'query_vars\', \'so306156_add_query_vars_filter\');
然后,在
pre_get_posts
, 您检查该var并相应地采取行动:
function so306156_manipulate_main_query($wp_query)
{
if (function_exists(\'is_woocommerce\') && !is_admin()) :
if ($wp_query->is_main_query() && is_woocommerce()) {
if (isset($wp_query->query_vars[\'topic\'])) {
$tax_query = $query->get(\'tax_query\');
$tax_query[] = [
\'taxonomy\' => \'topic\',
\'field\' => \'slug\',
\'terms\' => $wp_query->query_vars[\'topic\'],
\'include_children\' => true, //true is default so you could leave that one out..
\'operator\' => \'IN\' //also default
];
}
}
}
}
add_action(\'pre_get_posts\', \'so306156_manipulate_main_query\');
我不太确定
$wp_query->query_vars[\'topic\']
中的内容
terms
, 尝试在函数aka中回显该值
echo <pre>, print_r( $wp_query->query_vars[\'topic\'] ), \'</pre>\';
现在,我在考虑另一个问题。。您创建了自定义分类法topic
你在说什么,对吗??因为你在问题中没有提到这一部分。在你的问题中你说topic
是某种类型的子类别..=?!$%/$%/(?????product\\u cat的子类别??以上内容将不起作用=)