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

获取Speaker类型文章ID时遇非对象及未定义索引错误求助

问题

我需要通过文章标题获取speaker自定义文章类型的ID,编写了如下代码:

$atts['speakersname']='abc,xyz,prq'; // post title 
$getspeakertitle=explode( ',', $atts['speakersname']);
$speakerpostid[]='';
foreach ($getspeakertitle as $key => $value) {
 $speakerpostid[] = get_page_by_title( $value, OBJECT, 'speaker' );
} 
echo"<pre>";
print_r($speakerpostid); 
print_r($speakerpostid->ID);
print_r($speakerpostid['ID']);
print_r($speakerpostid[0]['ID']); 

尝试上述代码时出现以下错误:
执行print_r($speakerpostid->ID);时,提示:

Notice: Trying to get property 'ID' of non-object in

执行print_r($speakerpostid['ID']);时,提示:

Notice: Undefined index: ID in

尝试print_r($speakerpostid[0]['ID']);仅能显示第一个ID的值。

我需要将获取到的所有ID传入以下代码的post__in参数中:

$s_post = get_posts(array(
          'showposts' => 10, 
          'post_type' => 'speaker',
          'post_status'  => 'publish',
          'post__in'  => array('34'), // I have to pass id here to get all the details
            )
           );

请问我哪里出错了?

问题分析与修复方案

错误原因

  1. 数组初始化冗余:一开始给$speakerpostid添加了空字符串元素$speakerpostid[]='',导致数组首个元素是空值,后续索引访问直接出错。
  2. 数据类型混淆:get_page_by_title返回的是WP_Post对象,你直接把对象存入数组,之后却用数组下标['ID']访问对象属性,或者把整个数组当成对象用->ID访问,两种写法都不符合语法规则。
  3. ID提取不完整:没有从每个WP_Post对象中提取ID值,而是直接存储对象,导致无法直接生成post__in需要的纯ID数组。

修正后的代码

$atts['speakersname']='abc,xyz,prq'; // post title 
$getspeakertitle = explode(',', $atts['speakersname']);
$speakerpostid = []; // 初始化空数组,避免冗余空元素

foreach ($getspeakertitle as $value) {
    // 获取对应标题的speaker文章对象
    $speaker_post = get_page_by_title($value, OBJECT, 'speaker');
    // 校验对象有效性,跳过不存在的标题
    if ($speaker_post instanceof WP_Post) {
        $speakerpostid[] = $speaker_post->ID; // 仅提取ID存入数组
    }
} 

// 直接将纯ID数组传入post__in参数
$s_post = get_posts(array(
    'posts_per_page' => 10, // 推荐用posts_per_page替代已废弃的showposts
    'post_type' => 'speaker',
    'post_status' => 'publish',
    'post__in' => $speakerpostid,
    'orderby' => 'post__in' // 可选:保持传入ID的顺序返回文章
));

关键说明

  • 移除初始化时的空字符串元素,确保数组仅包含有效ID。
  • 循环中先校验WP_Post对象是否存在,避免无效标题导致的报错。
  • 替换showposts为posts_per_page,遵循WordPress官方推荐的参数写法。
  • 可选添加orderby => 'post__in',让返回的文章顺序与你传入ID的顺序一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:21:01