将数组作为变量传递到WP_QUERY

时间:2018-05-25 作者:CandyPaintedRIMS

我正在尝试根据post\\u id值数组动态创建一个元查询。但是,查询不起作用。我用过var_dump() 要查看$meta_array, 它似乎是一个标准数组,格式正确,可以传递到WP_Query().

$post_id_array = array( "12", "24" ); //this array will be dynamically generated
$meta_array = array();
foreach ($post_ids_array as $key => $value) {
    array_push($meta_array,
        array(
            \'key\' => \'relate_blog_posts\',
            \'value\' => $value,
            \'compare\' => \'LIKE\'
        )
    );
}

$post_args = array(
    \'post_type\' => \'post\',
    \'posts_per_page\' => 3,
    \'post_status\' => \'publish\',
    \'meta_query\' => array($meta_array)
 );
$post_query = new WP_Query($post_args);
请让我知道我是否犯了错误,或者只是走错了路。

谢谢

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

在@Krzysiek Dródż的帮助下,我找到了这个问题的解决方案。我的第一个问题是,我将$meta\\u数组嵌套在另一个数组中。

根据@Krzysiek的建议,我更改了这一行

\'meta_query\' => array($meta_array)

\'meta_query\' => $meta_array
。这允许元数组保持WP\\u查询对象的正确语法。我解决的最后一个问题是,在具有多个值的元查询中,必须定义值之间的关系。比如说

\'meta_query\' => array(
        array (
           \'key\' => \'relate_blog_posts\',
           \'value\' => \'155\',
           \'compare\' => \'LIKE\'
        ),
        array (
           \'key\' => \'relate_blog_posts\',
           \'value\' => \'156\',
           \'compare\' => \'LIKE\'
        )
    )
不会返回任何值,而以下值将:

\'meta_query\' => array(
        \'relation\' => \'OR\',
        array (
           \'key\' => \'relate_blog_posts\',
           \'value\' => \'155\',
           \'compare\' => \'LIKE\'
        ),
        array (
           \'key\' => \'relate_blog_posts\',
           \'value\' => \'156\',
           \'compare\' => \'LIKE\'
        ),
    )
因此,通过最初定义$meta\\u array以包含“relation”属性,最终的数组使用了正确的语法,并且查询工作正常。最终工作代码:

$post_ids_array = array( "12", "24" ); //this array will be dynamically generated
$meta_array = array(\'relation\'=>\'OR\');
foreach ($post_ids_array as $key => $value) {
    array_push($meta_array,
        array(
            \'key\' => \'relate_blog_posts\',
            \'value\' => $value,
            \'compare\' => \'LIKE\'
        )
    );
}

$post_args = array(
    \'post_type\' => \'post\',
    \'posts_per_page\' => 3,
    \'post_status\' => \'publish\',
    \'meta_query\' => $meta_array
);
$post_query = new WP_Query($post_args);

SO网友:Krzysiek Dróżdż

首先,您的代码中有一个输入错误。调用具有post ID的变量post_id_array, 但您的foreach循环使用post_ids_array (id)s 而不是id)。

当你解决这个问题时,还有一个问题。元查询参数应该是一个查询数组,每个查询都应该是一个数组。但是你的$post_args 由代码生成的代码如下所示:

array(4) {
  ["post_type"]=>
  string(4) "post"
  ["posts_per_page"]=>
  int(3)
  ["post_status"]=>
  string(7) "publish"
  ["meta_query"]=>
  array(1) {
    [0]=>
    array(2) {
      [0]=>
      array(3) {
        ["key"]=>
        string(17) "relate_blog_posts"
        ["value"]=>
        string(2) "12"
        ["compare"]=>
        string(4) "LIKE"
      }
      [1]=>
      array(3) {
        ["key"]=>
        string(17) "relate_blog_posts"
        ["value"]=>
        string(2) "24"
        ["compare"]=>
        string(4) "LIKE"
      }
    }
  }
}
正如你所见,meta_query 是一个数组,其中包含一个包含查询的数组。

下面是您的代码和所有修复程序:

$post_ids_array = array( "12", "24" ); //this array will be dynamically generated
$meta_array = array();
foreach ($post_ids_array as $key => $value) {
    array_push($meta_array,
        array(
            \'key\' => \'relate_blog_posts\',
            \'value\' => $value,
            \'compare\' => \'LIKE\'
        )
    );
}

$post_args = array(
    \'post_type\' => \'post\',
    \'posts_per_page\' => 3,
    \'post_status\' => \'publish\',
    \'meta_query\' => $meta_array
);
$post_query = new WP_Query($post_args);

结束

相关推荐

如何强制admin-ajax.php文件通过HTTPS加载?

我最近有一个网站100%支持HTTPS。前端和后端的所有资产都通过HTTPS成功调用,除了admin ajax。php。这会导致任何依赖于文件的功能失败,包括但不限于CF7、Elementor和其他使用AJAX提交的表单等。我得到的错误,你可以在截图中看到是“混合内容:页面位于”https://toursoft.co/contact-us/\' 已通过HTTPS加载,但请求了不安全的XMLHttpRequest终结点\'http://toursoft.co/wp-admin/admin-ajax.php\