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
相关产品推荐
相关产品推荐

