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

WordPress中Pods插件自定义文章类型关联查询返回空数组问题

解决Pods关联字段查询返回空数组的问题

Hey there! 我猜你踩了Pods关联字段存储的一个常见坑——Pods的关联字段(关联到另一个自定义文章类型时)存储的是目标文章的ID,而不是显示名称。所以你直接用公司名称$full_company_name作为meta_value去查,自然找不到匹配的结果啦。

下面给你两种可行的解决方法:

方法1:先获取公司ID,再用ID查询(适合用原生get_posts)

首先根据公司名称找到对应的Company类型文章的ID,然后用这个ID作为关联字段的查询值:

// 先根据公司名称获取对应的Company文章ID
$company = get_posts(array(
    'post_type' => 'company',
    'title' => $full_company_name,
    'numberposts' => 1,
    'fields' => 'ids' // 只返回ID,提高效率
));

if (!empty($company)) {
    $company_id = $company[0];
    // 现在用公司ID查询关联的Location文章
    $pos = get_posts(array(
        'numberposts' => 1000,
        'post_type' => 'location',
        'meta_key' => 'parent_company_name',
        'meta_value' => $company_id,
        'meta_compare' => '=' // 可选,默认就是=
    ));
} else {
    // 没找到对应公司的处理逻辑
    $pos = array();
}

方法2:直接用Pods的内置查询(更推荐,适配Pods的字段结构)

Pods提供了专门的查询API,能更准确地处理关联字段,避免原生WP查询的兼容性问题:

// 实例化Pods对象,指定查询的自定义文章类型为location
$pods = pods('location');

// 设置查询参数,关联字段用Pods的语法:{字段名}.ID
$pods->find(array(
    'limit' => 1000,
    'where' => array(
        'parent_company_name.ID' => get_post_id_by_title($full_company_name, 'company')
    )
));

// 获取查询结果
$pos = $pods->data();

// 辅助函数:根据标题和文章类型获取ID
function get_post_id_by_title($title, $post_type = 'post') {
    $posts = get_posts(array(
        'post_type' => $post_type,
        'title' => $title,
        'numberposts' => 1,
        'fields' => 'ids'
    ));
    return !empty($posts) ? $posts[0] : false;
}

另外还要检查两个关键点:

  • 确认你的关联字段parent_company_name的存储slug确实是这个(在Pods字段编辑页面可以看到“存储名称”),有时候可能会自动加前缀或者你设置了不同的slug。
  • 确保你要查询的Location文章确实关联了正确的Company,避免数据本身的问题。

内容的提问来源于stack exchange,提问作者Andrii Pryimak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:10:57