我有一个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页面做什么?
有没有办法解决这个问题?谢谢
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(); ?>>
还有,我很确定
id
s不应以数字开头。我得查一下,但如果记性好的话。。。