Php 用于WooCommerce产品的自定义元查询筛选器

Php 用于WooCommerce产品的自定义元查询筛选器,php,wordpress,woocommerce,product,hook-woocommerce,Php,Wordpress,Woocommerce,Product,Hook Woocommerce,我想用自定义的postmeta\u key对我的产品进行过滤,以获得“\u city\u name”,以及关键字“s”和操作,目前我正在函数中执行。php: function my_modify_main_query( $query ) { $meta_query_args = array( 'meta_query' => array( array( 'key' => '_city_name',

我想用自定义的post
meta\u key
对我的产品进行过滤,以获得
“\u city\u name”
,以及关键字
“s”
操作,目前我正在
函数中执行。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 params
“s”
中添加关键字,它就会工作

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

我做错了什么

首先,您需要始终在过滤器挂钩函数的末尾返回一些内容


可能您应该将
$\u GET['city']
包含在
'value'
中,方法是:
'value'=>$\u GET['city']
。但在获取['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
}
add_filter('pre_get_posts'、'my_modify_main_query');
函数my\u modify\u main\u query($query){
//检查“城市”数据
如果(!isset($\u GET['city'])返回$query;
$meta\u query\u args=数组(
“元查询”=>数组(
排列(
“键”=>“\u城市名称”,
'value'=>sanitize_text_字段($\u GET['city']),
'比较'=>'类似',
)
)
);
$query->set('meta\u query',$meta\u query\u args);
返回$query##
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
}