考虑一下你的问题。你在问这个$wpdb->postmeta.meta_key
是both “foo”和“bar”。这永远不会发生。如果您在可以读取MySQL调试数据的上下文中运行它(PhpMyAdmin的SQL
控制台将执行此操作)您可能会看到关于“不可能的where子句”的警告。你需要JOIN
在post meta表中查找其中一个值,但据我所知WP_Query
我也会这样做。
$args = array(
\'post_type\' => \'post\',
\'meta_query\' => array(
array(
\'key\' => \'foo\',
\'value\' => \'1\',
),
array(
\'key\' => \'bar\',
\'value\' => \'1\',
)
)
);
$query = new WP_Query( $args );
如果查看该查询的SQL--
var_dump($qry->request);
-- 您将看到
JOIN
我说的是。
打开过滤器也可以执行相同的操作pre_get_posts
.
function set_post_meta_wpse_111456($qry) {
$qry->set(
\'meta_query\',
array(
array(
\'key\' => \'foo\',
\'value\' => \'1\',
),
array(
\'key\' => \'bar\',
\'value\' => \'1\',
)
);
}
add_action(\'pre_get_posts\',\'set_post_meta_wpse_111456\');
WARNING: 如上所述,这将影响站点上的每个查询,因此您确实需要添加条件来限制查询的运行位置。