WordPress站点报错:Trying to get property 'ID' of non-object 求助
解决WordPress页面报错:Notice: Trying to get property 'ID' of non-object
报错原因
报错代码位于innerpages.php第20行的$page->ID,核心问题是$page变量未被正确定义为有效WP_Post对象,导致调用->ID属性时触发非对象报错。
修复方案
以下三种方案任选其一,根据实际需求选择:
方案1:使用WordPress内置函数get_the_ID()(最推荐)
直接用get_the_ID()获取当前页面ID,无需依赖未定义的$page变量,修改代码如下:
get_header(); ?> <?php $url = wp_get_attachment_url( get_post_thumbnail_id(get_the_ID()), 'full' ); ?> <section class="MainBanner position-relative bg-image" style="background-image: url('<?php echo $url; ?>')"> </section> <?php if(is_page(158)) { ?> <section id="InternalPage"> <div class="container">
方案2:使用全局$post对象
如果需要依赖对象调用,先声明全局$post对象(WordPress页面模板默认已初始化该对象):
get_header(); ?> <?php global $post; $url = wp_get_attachment_url( get_post_thumbnail_id($post->ID), 'full' ); ?> <section class="MainBanner position-relative bg-image" style="background-image: url('<?php echo $url; ?>')"> </section> <?php if(is_page(158)) { ?> <section id="InternalPage"> <div class="container">
方案3:增加容错判断(避免报错同时兼容异常情况)
如果不确定$page变量是否存在,先做有效性判断,防止报错:
get_header(); ?> <?php $url = ''; // 先判断$page是否为有效对象 if (isset($page) && is_object($page) && property_exists($page, 'ID')) { $url = wp_get_attachment_url( get_post_thumbnail_id($page->ID), 'full' ); } ?> <section class="MainBanner position-relative bg-image" style="background-image: url('<?php echo $url; ?>')"> </section> <?php if(is_page(158)) { ?> <section id="InternalPage"> <div class="container">
说明
- 方案1是最稳妥的选择,
get_the_ID()是WordPress专为获取当前页面/帖子ID设计的函数,无需额外变量声明。 - 方案2适合需要操作完整WP_Post对象的场景,但需确保全局
$post对象在当前模板中可用。 - 方案3适合保留原
$page变量逻辑但需要避免报错的场景,同时可根据需求添加默认图片等 fallback 逻辑。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

