您无法在元值内的数组内轻松查询。这是因为MySQL中没有数组值。相反,该值存储为serialized 一串
这样的数组:
array(
0 => 29,
1 => 28,
);
作为以下字符串存储在数据库中:
a:2:{i:0;i:29;i:1;i:28;}
因此,找到其中的值的唯一方法是
LIKE
在字符串上。但问题是,如果要检查
28
在数组中,您需要查询
LIKE \'%:28;%\'
, 但是除了速度慢得多之外,如果
28
是数组中的索引。
因此,使用add_post_meta()
为同一元键添加多行。例如,如果使用:
update_post_meta( $post_id, \'permit_users\', [ 29, 28 ] );
您将获得:
+--------------+--------------------------+
| meta_key | meta_value |
+--------------+--------------------------+
| permit_users | a:2:{i:0;i:29;i:1;i:28;} |
+--------------+--------------------------+
但如果您使用:
add_post_meta( $post_id, \'permit_user\', 28 );
add_post_meta( $post_id, \'permit_user\', 29 );
您将获得:
+-------------+------------+
| meta_key | meta_value |
+-------------+------------+
| permit_user | 28 |
| permit_user | 29 |
+-------------+------------+
还有你的
WP_Query
使用
IN
将按您期望的方式工作:
[
\'key\' => \'permit_user\',
\'value\' => get_current_user_id(),
\'compare\' => \'IN\',
],