获取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 ) );
请问我哪里出错了?
问题分析与修复方案
错误原因
- 数组初始化冗余:一开始给
$speakerpostid添加了空字符串元素$speakerpostid[]='',导致数组首个元素是空值,后续索引访问直接出错。 - 数据类型混淆:
get_page_by_title返回的是WP_Post对象,你直接把对象存入数组,之后却用数组下标['ID']访问对象属性,或者把整个数组当成对象用->ID访问,两种写法都不符合语法规则。 - 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
相关产品推荐
相关产品推荐

