按其他类别筛选WooCommerce存档页面

时间:2018-06-15 作者:nickpish

我在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);
}
基本上,我最终希望通过过滤器有选择地调用这个额外的查询参数,以进一步优化归档结果。因此,选中“艺术”框将以这种方式优化归档结果。有人知道我怎么做吗?感谢您的帮助!

1 个回复
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的子类别??以上内容将不起作用=)

结束