WordPress无法通过terms getter从term对象获取术语名称问题
报错原因
你的代码存在三处核心问题,直接触发致命错误:
- 错误取值文章ID:
wp_get_recent_posts()返回的单条文章数据中,ID字段本身就是整数类型的文章ID,不是数组结构,你写的$post_item['ID'][0]属于非法取值,PHP会对整数做隐式类型转换,之前能输出term结果属于偶发的错误逻辑歪打正着,不代表写法正确。 - 方法调用语法错误:双冒号
::是PHP类静态方法/静态属性的调用符,__get是仅能在实例上触发的魔术方法,无法通过静态方式调用。 - 调用主体错误、魔术方法使用方式错误:你尝试在错误取出的ID值上调用方法,根本没有指向WP_Term实例对象;同时PHP的
__get是自动触发的魔术方法,不需要手动显式调用,且WP_Term的实例属性全部为公开属性,根本不需要走__get的访问逻辑。
另外你之前硬编码[0]索引取第一个term的写法也存在风险:如果文章没有关联对应分类法的术语,wp_get_post_terms()会返回空数组或者WP_Error对象,直接取索引会触发数组越界错误。
正确写法示例
$recent_posts = wp_get_recent_posts(array( 'numberposts' => 5, 'category' => 18, 'post_status' => 'publish' )); foreach ($recent_posts as $post_item) { $post_id = $post_item['ID']; // 第二个参数可替换为你需要获取的分类法,如category、自定义分类法标识 $terms = wp_get_post_terms($post_id, 'post_tag'); // 先判断返回值合法性,避免报错 if (!is_wp_error($terms) && !empty($terms)) { foreach ($terms as $term) { // WP_Term属性为公开,直接通过对象属性符访问即可 var_dump($term->name); // 其余属性如slug、term_id、taxonomy访问逻辑一致:$term->slug } } }
补充提示
调用WordPress的术语、文章相关接口时,永远要先做返回值判断:接口在参数错误、无对应数据时会返回WP_Error对象或者空数组,直接遍历/取索引很容易触发站点报错。
内容的提问来源于stack exchange,提问作者Gui
相关产品推荐
相关产品推荐

