PHP通知错误(位于404页)

时间:2012-12-05 作者:mousesports

我有一个404.php 我的主题模板。我也有WP_DEBUG 在wp配置中。php设置为TRUE.

考虑一下这个404模板:

get_header(); ?>

<div id="content" style="full-width">
    <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
        <div class="post-content">
        Whatever.
        </div>
    </div>
</div>

<?php get_footer(); ?>
我得到以下错误:

注意:正在尝试获取中非对象的属性/路径/发布模板。php在线

现在我知道错误是由调用the_ID() 在第4行。对我来说,最简单的解决方案就是在模板中删除它。

但是,在其他模板部件中也有位置,header.php 例如,调用相同函数或使用$post->ID.

例如$project_meta = get_post_meta($post->ID, \'show_project_meta\', true);. 这是共享的,在任何其他模板中都可以正常工作,即页面有帖子/页面ID的地方。我可以为404页面做什么?

有没有办法解决这个问题?谢谢

2 个回复
SO网友:Chip Bennett

这个404.php 模板文件用于404 错误:即未找到帖子。

因为没有帖子,所以没有$post 对象。没有$post 对象,函数,例如the_ID() 不可用,并将返回您观察到的错误。

修复方法:替换的所有实例$post-具有静态数据的派生数据。e、 g.更换:

<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
。。。使用此选项:

<div id="post-0" <?php post_class(); ?>>

SO网友:s_ha_dum

the_ID 用于循环中。即使你的循环开始于get_header 并不是所有的东西都会有适当的循环。看起来是这样,但另一方面have_posts, 这应该开始你的循环,应该意味着循环不会从404页开始。不管怎样,这就是我尝试它时发生的事情。所以,也许这个页面根本就不在循环中。

$post 大多数情况下,都是在页面加载的早期设置的。如果这不在循环中--也就是说,循环不会从get_header-- 这个ID可能不是你所期望的,或者你想要的。在博客索引上,index.php, 该ID是循环中第一篇文章的ID,实际上不是索引页的ID,索引页根本没有ID,除非您将索引设置为后端的页面。尽管如此,ID仍然是循环中的第一个帖子,而不是“静态”页面的ID。您将遇到相同的post/Loop问题$post->ID.

当然,这大部分是基于对一些主题/模板结构的猜测。

你真的应该像这样有条件地设置它。。。

if (is_single() {
    $pID = $post->ID;
} elseif (is_search()) {
    $pID = <something>;
} // and so on until you get all the conditions you need

<div id="content" style="full-width">
    <div id="post-<?php echo $pID ?>" <?php post_class(); ?>>
还有,我很确定ids不应以数字开头。我得查一下,但如果记性好的话。。。

结束

相关推荐

My posts show 2 comment forms

我们有一个Wordpress网站,lifering.org, 在戈达迪主持。我们最近升级了虚拟服务器的Linux操作系统,这涉及到从备份重建站点。现在,我们的单篇帖子显示了两个评论回复表单。我相信我们之前每个帖子只有一个评论回复表。我不知道这是怎么发生的-我自己做了备份-或者如何修复它。