WP_Query的meta_query如何对比数组类型的自定义字段值?
解决方案
你的场景是自定义字段manager以序列化数组格式存储多用户ID,原有代码的LIKE查询会出现误匹配(比如查询用户ID 5时会把ID为15、25的用户也命中),只要调整查询的匹配规则即可实现精确筛选:
序列化后存储的用户ID会被包裹在英文双引号内(参考你给出的示例a:2:{i:0;s:1:"2";i:1;s:1:"5";}中,ID 2对应存储为"2",ID5对应存储为"5"),因此将查询值拼接双引号即可实现精确匹配:
$current_user_id = get_current_user_id(); $args = array( 'post_type' => 'music', 'post_status' => 'publish', 'posts_per_page' => -1, 'orderby' => 'title', 'order' => 'ASC', 'meta_query' => array( array( 'key' => 'manager', 'value' => sprintf('"%d"', $current_user_id), 'compare' => 'LIKE', ), ) ); $loop = new WP_Query( $args );
补充说明
sprintf('"%d"', $current_user_id)会强制将用户ID转为整型后再拼接双引号,既避免了SQL注入风险,也完全匹配序列化字符串中的ID格式,不会出现误匹配问题- 如果后续站点数据量较大,这种
LIKE查询性能偏低,你可以调整字段存储逻辑:同一篇文章对应多个manager自定义字段,每个字段单独存储一个用户ID,此时直接使用compare => '='即可查询,性能会远高于序列化数组的模糊查询。
内容的提问来源于stack exchange,提问作者lonerunner
相关产品推荐
相关产品推荐

