【问题标题】:Custom meta query filter for WooCommerce productsWooCommerce 产品的自定义元查询过滤器
【发布时间】:2017-08-12 06:15:00
【问题描述】:

我想用自定义帖子meta_key 过滤我的产品 "_city_name",以及关键字 "s"AND 目前我正在我的functions.php 中进行操作:

function my_modify_main_query( $query ) {

    $meta_query_args = array(
        'meta_query' => array(
            array(
                'key' => '_city_name',
                'value' => 'new york',
                'compare' => 'LIKE',
            )
        )
    );
    $query->set('meta_query', $meta_query_args);
}

add_filter( 'pre_get_posts', 'my_modify_main_query' );

如果我不在 GET 参数中添加关键字,它会起作用 "s"

但是如果我添加关键字"s=beer&city=newyork",它就会停止工作。

我做错了什么?

【问题讨论】:

    标签: php wordpress woocommerce product hook-woocommerce


    【解决方案1】:

    首先,您需要在最后始终在过滤器挂钩函数中返回一些内容

    return $query;
    

    您可能应该将$_GET['city'] 包含在'value' 中,这样:'value' => $_GET['city'], 代替。但是您需要在$_GET['city'] 值之前检查。

    所以你的代码应该是:

    add_filter( 'pre_get_posts', 'my_modify_main_query' );
    function my_modify_main_query( $query ) {
    
        // Checking for "city" data
        if( ! isset( $_GET['city'] ) ) return $query;
    
        $meta_query_args = array(
            'meta_query' => array(
                array(
                    'key' => '_city_name',
                    'value' => sanitize_text_field( $_GET['city'] ),
                    'compare' => 'LIKE',
                )
            )
        );
        $query->set('meta_query', $meta_query_args);
    
        return $query; ## <==== This was missing
    }
    

    代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件中。

    我没有测试它,但它应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-29
      • 2018-12-24
      • 2022-11-05
      • 1970-01-01
      • 2018-09-08
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多