WordPress中meta_value为序列化键值对时如何正确使用meta_query
你可以按照序列化数据的存储格式拼接匹配片段,修改value字段即可实现筛选,具体实现方式如下:
实现逻辑
_sfwd-courses的序列化值是固定的键值结构,用LIKE模糊匹配对应键值的序列化片段即可命中符合条件的记录,你首先要确认$_GET['priceid']对应的是课程配置中的哪个字段:
- 如果是价格类型(免费/付费/关闭购买),对应的键是
course_price_type - 如果是具体价格数值,对应的键是
course_price
修改后的代码示例
if ( isset( $_GET['priceid'] ) && ! empty( $_GET['priceid'] ) ) { // 对传入参数做安全过滤 $target_value = sanitize_text_field( $_GET['priceid'] ); // 下方根据你要匹配的字段修改前缀: // 匹配价格类型用这个前缀:s:15:"course_price_type";s: // 匹配具体价格用这个前缀:s:12:"course_price";s: $match_segment = sprintf( 's:15:"course_price_type";s:%d:"%s"', strlen( $target_value ), $target_value ); $filter['meta_query'][] = array( 'key' => '_sfwd-courses', 'value' => $match_segment, 'compare' => 'LIKE', ); }
注意事项
- 键名的字符串长度不能写错:
course_price_type共15个字符,对应s:15;course_price共12个字符,对应s:12,长度不匹配会导致匹配失败。你也可以直接从序列化存储截图中复制对应字段的前缀,确保格式完全一致。 - 必须对传入的
$_GET['priceid']做安全过滤,避免SQL注入风险。 - 如果需要实现价格区间筛选,需要将
compare改为REGEXP,编写对应数值范围的正则表达式做匹配。
内容的提问来源于stack exchange,提问作者Parthavi Patel
相关产品推荐
相关产品推荐

