向WP META_QUERY添加查询字符串中的数组

时间:2016-06-06 作者:Mike Boory

我正在以数组的形式从查询字符串中收集值。然后收集这些值并将它们放入“meta\\u查询”的值中。

在WP\\u查询没有输出任何内容的情况下,我遇到了问题。我觉得“meta\\u查询”中的第二个数组有问题。

我尝试将比较改为“LIKE”,这样会显示所有内容,而不是查询中的内容。我还试图消除这种关系,否则对结果没有影响。

当我打印出变量时,我得到了我想要的正确数组。

查询字符串:

?variable[]=value1&variable[]=value2
PHP代码:

<?php
$variable_selected = $_GET[\'variable\'];

$filter = array(
    \'post_type\' => \'my_custom_post_type\',
    \'meta_query\' => array(
        \'relation\' => \'OR\',
         array(
            \'key\' => \'my_post_field\',
            \'value\' => $variable_selected,
            \'compare\' => \'IN\'
            )
        )

    );

    $posts = new WP_Query( $filter  );
这方面的任何帮助都会很好。

1 个回复
最合适的回答,由SO网友:Ismail 整理而成

$_GET[\'variable\'] 是一个数组,根据URL查询字符串?variable[]=value1&variable[]=value2, $_GET[\'variable\'][0]$_GET[\'variable\'][1] 应返回这两个键值

编辑-讨论后-使其动态化

$meta_query = array();
if ( ! empty( $_GET["variable"] ) ) {
    if ( is_array( $_GET["variable"] ) ) {
        $meta_query[\'relation\'] = \'OR\';
        foreach ( $_GET["variable"] as $value ) {
            $meta_query[] = array(
                \'key\' => \'my_post_field\',
                \'value\' => sanitize_text_field( (string) $value ),
                \'compare\' => \'=\'
            );
        }
    } else {
        $meta_query = array(
            \'key\' => \'my_post_field\',
            \'value\' => sanitize_text_field( (string) $_GET["variable"] ),
            \'compare\' => \'=\'
        );
    }
}
$filter = array(
    \'post_type\' => \'my_custom_post_type\',
    \'meta_query\' => array(
        \'relation\' => \'OR\',
        $meta_query
    )
);
$posts = new WP_Query( $filter );
我已将操作员更改为= 因为我在测试它,它在我的本地安装上工作。

meta\\u compare(string)-用于测试“meta\\u值”的运算符。可能的值为“=”、“!=”、“>”、“>=”、\'<;\',\'<;=\',\'LIKE、NOT LIKE、IN、NOT IN、BETWEEN、NOT BETWEEN、NOT EXISTS、REGEXP、NOT REGEXP或RLIKE。默认值为“=”&mdash;codex

相关推荐

ARRAY_MERGE内的Foreach循环

我需要在下拉菜单中获得用户显示名称的列表。我有查询权限,但我不确定如何准确地将我的用户foreach放入数组中。以下是我需要将用户注入的代码:$data[\'settings\'][\'advanced_options\'] = array_merge($data[\'settings\'][\'advanced_options\'], [ [ "label" => "Dynamic Option 1", //