You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 11:33:11