wp_query 和 meta_query 用于转发器字段值

Posted

技术标签:

【中文标题】wp_query 和 meta_query 用于转发器字段值【英文标题】:wp_query and meta_query for repeater field values 【发布时间】:2020-04-16 06:11:17 【问题描述】:

我有一个带有自定义字段的文字新闻网站。 我需要将转发器字段作为表格进行查询。看起来是这样的:

        | param_1 | param_2 | param_2  | param_4
        |    20   |   20    | 20       |   20
        |    555  |   680   | 56       |    0
        |    5555 |   45    | 56       |    1
        |    69   |   0     | 45       |    0

只有当它与同一行中的查询匹配时,我才需要查询此转发器以获得结果

我的元查询如下所示:

[post_type] => product
[posts_per_page] => -1
[orderby] => title
[order] => ASC
[meta_query] => Array (
    [relation] => AND
    [0] => Array (
        [key] => BBBproduct_params_values_AAA_param_value_0
        [value] => 25
        [compare] => <=
        [type] => NUMERIC
        )
    [1] => Array (
        [key] => BBBproduct_params_values_AAA_param_value_1
        [value] => 56
        [compare] => >=
        [type] => NUMERIC
        )
    [2] => Array (
        [key] => BBBproduct_params_values_AAA_param_value_2
        [value] => 56
        [compare] => >=
        [type] => NUMERIC
        )
    [3] => Array (
        [key] => BBBproduct_params_values_AAA_param_value_3
        [value] => 0
        [compare] => =
        [type] => NUMERIC
        )
    )

她是通过以下代码创建的:

if( $product_search_by_param_active )
function my_posts_where( $where )


    $where = str_replace("AAA_param_value_", "%_param_value_", $where);
    $where = str_replace("meta_key = 'BBBproduct_params_values_", "meta_key LIKE 'product_params_values_", $where);


    return $where;

add_filter('posts_where', 'my_posts_where');


$range_angine_settings = get_field('param_search_range_settings');
$search_args['meta_query'] = array();
$search_args['meta_query'] ['relation'] = 'AND';


foreach( $range_angine_settings as $rangekey => $search_range )
    $'range-'.$rangekey = $_GET['range-'.$rangekey]? $_GET['range-'.$rangekey] : '0';
    if ( $_GET['range-'.$rangekey] ) $has_range_query = true; 
    //$pre_prama_value = 'product_params_values_'.strval($rangekey).'_param_value_AAA';

    if( isset($_GET['range-'.$rangekey]))
        $search_args['meta_query'][] = array(
                "key" => 'BBBproduct_params_values_AAA_param_value_'.strval($rangekey),
                "value"    => $search_range['search_metric_ranges'][$'range-'.$rangekey]['range_value'],
                "compare"  => $search_range['product_search_logic'],
                'type'    => 'NUMERIC'
        );      
    


问题在于,即使查询匹配不在同一行上,我也会得到结果,因为 '%'。

在上面的示例中,它不打算得到任何结果,但是由于在不同的行上满足每个条件,我确实得到了结果。

有没有办法创建这个查询之王以按行号给出结果?

【问题讨论】:

【参考方案1】:

对我来说,我更喜欢将 CMB2 用于自定义字段 https://github.com/CMB2/CMB2

【讨论】:

看起来很有趣。我实际上最终为此使用了一个过滤器。

以上是关于wp_query 和 meta_query 用于转发器字段值的主要内容,如果未能解决你的问题,请参考以下文章

php wp_query多个meta_query参数

WP_Query 与 meta_query 和自定义字段的值为 0

在 wp_query 中结合关键字搜索和税务查询

WP_查询 |数组序列化形式的 meta_query 参数元值

Wordpress - 在类别存档中使用 wp_query - 如何显示适当的类别?

自定义 wp_query 上的 Wordpress 分页(next_posts_link)未显示