WP_Meta_Query
是核心中某种程度上“不太稳定”的部分,如果你不太注意,它很容易摆脱困惑。
当你在做new WP_Query()
并且有meta_query => array()
参数或其单键/值对等效项,然后new WP_Meta_Query()
跳入,然后立即解析。
$this->meta_query = new WP_Meta_Query();
$this->meta_query->parse_query_vars( $q );
当您查询元数据时,允许的值
bool
选项如果你使用它,那么它会回落到
CHAR
, 作为允许值数组的默认值为:
\'NUMERIC\', \'BINARY\', \'CHAR\', \'DATE\', \'DATETIME\', \'DECIMAL\', \'SIGNED\', \'TIME\', \'UNSIGNED\'
在哪里
NUMERIC
将重置为
SIGNED
.
调试
有许多过滤器会影响保存后的过程,因此首先要检查一些循环中的不同值:
var_dump( get_post_meta( get_the_ID(), \'_price_rented\', true ) );
然后,根据返回值,您必须使用
SIGNED
, 如果结果是
0
或
1
, 或
"true"
或
"false"
如果结果是字符串。如果它真的是布尔值,那么我仍然建议使用
string
只是为了确保它通过
$GLOBALS[\'wpdb\']
, 只能通过
%s
字符串和
%d
数字至。
我刚刚更新的其他注释the Codex entry for WP_Meta_Query
今天,我看到有很多不同的输出(添加了大量不需要的JOINS
, 在Trac上讨论here删除>和here 随着退出单个补丁移动到核心)可能。(后续票据AND
零件here) 关键是可以使用以下组合meta_*
与meta_query
阵列及其子阵列。除非将其转储,否则结果几乎未知,因此最好使用or 另一种添加输入的方法<尤其是当您仅使用meta_key
, 因为这在某些情况下会导致“仅关键字查询”。
解决方案
如评论中所述:
(…)var_dump
返回可用的非租赁公寓的以下内容:string(0) ""
对于不可用的租赁公寓:string(1) "1"
现在meta_query
必须使用
\'meta_query\' => array( \'relation\' => \'OR\', array(
\'meta_key\' => \'_price_rented\',
\'meta_value\' => \'1\',
\'meta_compare\' => \'=\'
) );
如果您想获得“不可用的租赁公寓”或使用
\'!=\'
收回“未出租”的公寓。
注:可能的值meta_compare
是\'=\', \'!=\', \'>\', \'>=\', \'<\', \'<=\', \'LIKE\', \'NOT LIKE\', \'IN\', \'NOT IN\', \'BETWEEN\', \'NOT BETWEEN\', \'NOT EXISTS\', \'REGEXP\', \'NOT REGEXP\'
或\'RLIKE\'
. 默认值为\'=\'
.