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\'. 默认值为\'=\'.