使用布尔后置元时的严格比较问题

时间:2021-05-24 作者:Meyer Auslander

register_meta(
    \'post\',
    \'my_boolean_meta_value\',
    array(
        \'show_in_rest\' => true,
        \'type\'         => \'boolean\',
        \'single\'       => true,
        \'default\'      => true,
    )
);
update_post_meta(166,\'my_boolean_meta_value\',false);
update_post_meta(167,\'my_boolean_meta_value\',true);
$false_value=get_post_meta(166,\'my_boolean_meta_value\',true);
$true_value=get_post_meta(167,\'my_boolean_meta_value\',true);
if (false === $false_value) {
    echo "Verified false_value is false." . \'<br>\';
}
if (true === $true_value) {
    echo "Verified true_value is true";
}
if (\'\' === $false_value) {
    echo "Verified false_value is an empty string. " . \'<br>\';
}
if (\'1\' === $true_value) {
    echo "Verified true_value is \'1\'";
}
预期输出应表明$true\\u值为true, $false\\u值为false. 相反,输出为:

Verified false_value is an empty string.
Verified true_value is \'1\'
在WordPress的未来版本中,我们可以期望布尔元数据总是返回空字符串吗false 和字符串“1”,而不是true?

1 个回复
SO网友:Meyer Auslander

正如Tom所说,在对该问题的评论中,由于向后兼容性问题,WordPress似乎不太可能更改其存储/返回布尔post meta的标准。然而,我想到了一些编写代码的方法,即使WordPress标准确实改变了他们的标准,这些代码也能正常工作:

始终使用php将布尔Post元数据转换为其精确的布尔值boolval function. e、 g。,boolval( get_post_meta( $id, \'my_boolean_post_meta\', true ) );. 如果是这样的话,现在就可以与truefalse.string 或integer 实现布尔变量。选择你自己的标准来判断什么是正确的,什么是错误的。然后将它们定义为全局常量true “1”和false 作为“”,以下元查询仍然有效(至少在版本5.7.2之前):
用于获取真值:

array(
    \'key\'     => \'my_boolean_post_meta\',
    \'value\'   => true,
    \'compare\' => \'=\',
),
获取假值:

array(
    \'key\'     => \'my_boolean_post_meta\',
    \'value\'   => false,
    \'compare\' => \'=\',
),
看来\'compare\' => \'=\' 不会导致严格的比较。

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在