与@sMyles的回答相比,还有一点小小的改进。
我曾经遇到过这样的情况,ID被存储为字符串(例如从表单输入中获取的字符串)和整数(例如。update_post_meta($post_id, authorized_users\', array(get_current_user_id()));
). 这有点像众所周知的wp_set_object_terms()
您可以使用术语ID来设置术语,但如果您不先将它们转换为整数,则有大约50%的机会创建以这些数字作为名称的新术语。
这可能会导致它们以完全不同的方式存储在序列化数组中,从我的测试站点数据库中的一个案例摘录中可以看出:
a:1:{i:0;s:1:"1";} // \'s\' for \'string\', also note the double quotes
a:1:{i:0;i:1;} // \'i\' for \'integer\', no quotes
当通过
print_r()
将渲染为
Array
(
[0] => 1
)
为了解决这个问题,我对
meta_query
通过添加
relation
以及将值转换为整数而不是字符串的查询的另一个版本。
以下是最终结果:
\'meta_query\' => array(
\'relation\' => \'OR\', // Lets it know that either of the following is acceptable
array(
\'key\' => \'bcm_enm_authorized_users\',
\'value\' => serialize(strval(get_current_user_id())), // Saved as string
\'compare\' => \'LIKE\'
),
array(
\'key\' => \'bcm_enm_authorized_users\',
\'value\' => serialize(intval(get_current_user_id())), // Saved as integer
\'compare\' => \'LIKE\'
),
),
EDIT: 刚刚意识到,此方法可能会与数组索引发生冲突,这可能会允许某些人非法访问不在数组中但其用户ID显示为索引的材质。因此,如果您讨论了这个问题,那么这个方法可以工作,但更好的做法是确保您要搜索的任何值在保存之前都转换为字符串,以便您可以使用@sMyles方法。