gpt4 book ai didi

php - 在 WooCommerce 中过滤产品类别存档页面

转载 作者:行者123 更新时间:2023-12-05 06:33:10 24 4
gpt4 key购买 nike

我目前正在开发一个 WordPress/WooCommerce 书店网站,该网站使用自定义 taxonomy.php WooCommerce 模板按称为“亮点”的产品类别显示产品集。因此,例如,/books/product-category/highlights/best-sellers 显示与“亮点”的“畅销书”子类别关联的产品。我想做的是向这些存档页面添加过滤器功能,以允许通过称为“主题”的不同类别对这些产品类别进行更细粒度的查看。因此,例如,选中“艺术”的“畅销书”页面上的框将显示该类别中的畅销书。

最后,我想在 URL 中使用 $_GET 参数,例如 /books/product-category/highlights/best-sellers/?topic=art 。我一直在试验 pre_get_posts 但我的结果充其量只是有点不稳定。以下是我迄今为止在 functions.php 中尝试过的内容:

add_action('pre_get_posts', 'filter_product_topic');

function filter_product_topic($query) {

if( is_admin() ) return;
$tax_query = $query->get('tax_query');

if( isset($_GET['topic']) ) {
$tax_query[] = array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => $_GET['topic'],
'operator' => 'IN'
);
}
$query->set('tax_query', $tax_query);
}

作为一个非常基本的测试,这似乎适用于主要存档查询,但它似乎对模板的其余部分有不利影响,并且看起来会破坏页面上显示的英雄元素的不同查询不同产品的轮播。对于那些更熟悉 WooCommerce 的人,我想知道是否有更好的方法来实现所需的结果只影响主要存档产品查询,而不影响模板中可能存在的任何其他结果?

在此感谢您的帮助,如果我的问题或相关细节有任何不清楚的地方,请告诉我。

最佳答案

在您的代码中,主要缺少的东西应该是使用 is_main_query() WP_Query method这样:

if( ! $query->is_main_query() ) return;

或者不使用 WordPress pre_get_posts 过滤器 Hook ,在 Woocommerce 中进行税务查询,您可以使用dedicated woocommerce_product_query_tax_query 过滤器 Hook ,已经包含 is_main_query() Wordpress WP_Query 方法。

这个钩子(Hook)是 woocommerce 专用 WC_Query 类的一部分。所以试试这个:

add_filter( 'woocommerce_product_query_tax_query', 'filter_product_topic', 10, 2 );
function filter_product_topic( $tax_query, $query ) {
// Only on Product Category archives pages
if( is_admin() || ! is_product_category() ) return $tax_query;

// The taxonomy for Product Categories
$taxonomy = 'product_cat';

if( isset( $_GET['topic'] ) && ! empty( $_GET['topic'] )) {
$tax_query[] = array(
'taxonomy' => $taxonomy,
'field' => 'slug',
'terms' => array( $_GET['topic'] ),
'operator' => 'IN'
);
}

return $tax_query;
}

代码进入事件子主题(或事件主题)的 function.php 文件。它应该有效。

关于php - 在 WooCommerce 中过滤产品类别存档页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50884905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com