如何在WordPress的meta_query中对meta_key使用LIKE比较运算符
解决WordPress按包含特定文本的meta_key查询文章的问题
好问题!WordPress默认的meta_query确实主要针对meta_value做比较,但要实现对meta_key的LIKE匹配也有两种靠谱的方法,我来给你详细说明:
方法1:利用原生meta_query参数(推荐,符合WP开发规范)
你可以在meta_query的数组中,将key设置为带SQL通配符%的目标字符串,同时指定compare为LIKE,这样就能匹配所有meta_key包含trend_link的条目。如果还需要筛选对应的meta_value,也可以加上相关条件:
$posts = get_posts(array( 'numberposts' => -1, 'post_type' => 'projects', 'meta_query' => array( array( 'key' => '%trend_link%', // 通配符表示匹配任意位置包含trend_link的meta_key 'compare' => 'LIKE', 'value' => 10, // 保留你原本需要的meta_value筛选条件 'type' => 'NUMERIC' // 若value是数字类型,添加该参数让查询更精准 ) ) ));
注意点:
%是SQL的通配符,前后都添加表示匹配任意位置包含trend_link的meta_key;如果只加前面/后面,就是匹配以trend_link结尾/开头的key- 若不需要筛选meta_value,可直接去掉
value和type参数,只保留key和compare即可
方法2:自定义SQL查询(灵活度更高,适合复杂场景)
如果原生meta_query满足不了复杂的查询逻辑,你可以直接用WordPress全局的$wpdb对象执行自定义SQL,先获取符合条件的文章ID,再通过get_posts获取完整的文章对象:
global $wpdb; // 第一步:查询符合条件的文章ID $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT DISTINCT post_id FROM {$wpdb->postmeta} WHERE meta_key LIKE %s AND meta_value = %d", // 可根据需求调整meta_value的比较规则 '%trend_link%', 10 ) ); // 第二步:根据ID获取文章 $posts = get_posts(array( 'numberposts' => -1, 'post_type' => 'projects', 'post__in' => $post_ids, 'orderby' => 'post_date', // 可按需添加排序规则 'order' => 'DESC' ));
这种方法的优势在于可以完全掌控SQL逻辑,比如添加多条件联合查询、自定义排序等,适合复杂的业务场景。
内容的提问来源于stack exchange,提问作者Vishnu Sasidharan
相关产品推荐
相关产品推荐

