首页 > 解决方案 > Woocommerce 元查询在 product_query 中不起作用

问题描述

我想使用过滤器更改 woocommerce 产品页面循环中的产品

我正在尝试从 url 过滤wordpress.test/shop?filterbyAge=23,现在我在函数文件中添加了代码但不起作用

我在产品中使用 ACF 插件创建了猫科动物

function updateQueryByAgeFilter( $q ){ 
    if (isset($_GET['filterbyAge'])) {
    
        $q->set('meta_query', [
            [
                'key' => 'book_age_group',
                'value' => $_GET['filterbyAge'],
                'compare' => '='
            ]
        ]);
    }
}
add_action( 'woocommerce_product_query', 'updateQueryByAgeFilter' );

请帮我解决这个问题

标签: phpwordpresswoocommercehook-woocommercewoocommerce-theming

解决方案


似乎缺少合并查询

所以你得到:

// Change the shop query
function action_woocommerce_product_query( $q, $query ) {
    // Returns true when on the product archive page (shop) & isset
    if ( is_shop() && isset( $_GET['filterbyAge'] ) ) {        
        // Get any existing meta query
        $meta_query = $q->get( 'meta_query' );
        
        // Settings
        $key = 'book_age_group';
        $value = $_GET['filterbyAge'];
        
        $meta_query[] = array(
            'key' => $key,
            'value' => $value,
            'compare' => '='
        );

        // Set the new merged meta query
        $q->set( 'meta_query', $meta_query );
    }
}
add_action( 'woocommerce_product_query', 'action_woocommerce_product_query', 10, 2 );

推荐阅读