WordPress单篇文章模板:隐藏首尾文章的上/下一篇按钮并解决报错
解决WordPress单篇文章上/下一篇按钮报错并隐藏无内容按钮的方法
问题根源
当处于第一篇或最后一篇文章时,get_previous_post()或get_next_post()会返回null,但你的代码未将后续HTML输出逻辑包裹在条件判断内,直接访问$prev->ID或$next->ID就会触发“Attempt to read property 'ID'”警告。
修复后的PHP代码
将上一篇/下一篇的完整HTML结构放入if判断块中,确保仅存在对应文章时才渲染按钮:
<div id="post-nav" class="navigation"> <?php $prevPost = get_previous_post(true); if($prevPost) { $prev = get_adjacent_post(true,'',true); ?> <div class="col_nav"> <a href="<?php echo get_permalink($prev->ID);?>"> <div class="nav_bar_1"> <div class="nav_text_1">Vorheriger Beitrag: <p><?php echo get_the_title($prev->ID );?></p> </div> </div> </a> <div class="nav_pic"> <?php $prevthumbnail = get_the_post_thumbnail($prevPost->ID ); previous_post_link("$prevthumbnail", TRUE); ?> </div> </div> <?php } ?> <?php $nextPost = get_next_post(true); if($nextPost) { $next = get_adjacent_post(true,'',false); ?> <div class="col_nav"> <a href="<?php echo get_permalink($next->ID);?>"> <div class="nav_bar_2"> <div class="nav_text_2">Nächster Beitrag: <p><?php echo get_the_title($next->ID );?></p> </div> </div> </a> <div class="nav_pic"> <?php $nextthumbnail = get_the_post_thumbnail($nextPost->ID ); next_post_link("$nextthumbnail", TRUE); ?> </div> </div> <?php } ?> </div>
核心修改点
- 把
if($prevPost)改为包裹整个上一篇按钮的HTML块,无对应文章时完全不渲染该部分 - 同理处理下一篇按钮的条件判断,避免空值访问
- 将
$prev和$next的定义移至if内部,仅在需要时执行查询,优化性能
可选样式优化
如果希望单侧按钮存在时占满整个宽度,可添加CSS规则:
/* 单个导航按钮时占满100%宽度 */ #post-nav .col_nav:only-child { width: 100%; }
内容的提问来源于stack exchange,提问作者Jakub
相关产品推荐
相关产品推荐

