WordPress自定义页面模板无法显示当前登录用户帖子问题排查
问题诊断与修复方案
我帮你排查了代码里的问题,主要有两个关键点导致页面始终显示特定用户的帖子,而非当前登录用户的内容:
WP_Query 参数嵌套错误
你已经正确构建了$author_query参数数组,但在初始化$wpb_all_query时,错误地把这个数组又套了一层array()——也就是写成了new WP_Query(array($author_query))。WP_Query需要接收一维的参数数组,这种嵌套会让参数解析出现异常,最终可能默认使用了某个固定用户ID,或者因参数无效回退到了默认值。冗余且未使用的查询实例
你创建了$author_posts这个WP_Query对象,但完全没有用到它,这属于冗余代码,虽然不直接引发问题,但会浪费不必要的服务器资源。
另外,我建议增加一个用户登录状态检查,避免未登录用户看到奇怪的提示。
修复后的完整代码
<?php // 获取当前登录用户信息 global $current_user; wp_get_current_user(); // 先检查用户是否已登录 if ( is_user_logged_in() ) { // 构建正确的查询参数 $author_query = array( 'posts_per_page' => -1, // 显示该用户所有帖子 'author' => $current_user->ID ); // 初始化查询:注意不要嵌套数组! $wpb_all_query = new WP_Query($author_query); if ( $wpb_all_query->have_posts() ) : ?> <ul> <!-- 循环输出用户帖子 --> <?php while ( $wpb_all_query->have_posts() ) : $wpb_all_query->the_post(); ?> <li> <a href="<?php the_permalink(); ?>"> <?php the_title(); ?> <span style="margin-left: 8px; color: #666;"><?php echo get_the_date(); ?></span> <span style="margin-left: 8px; color: #666;"><?php echo the_author(); ?></span> </a> </li> <?php endwhile; ?> </ul> <?php wp_reset_postdata(); // 重置查询状态,避免影响后续内容 ?> <?php else : ?> <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p> <?php endif; } else { // 未登录时的友好提示 echo '<p>' . __( 'Please log in to view your posts.' ) . '</p>'; } ?>
核心修复说明
- 移除了
array($author_query)的嵌套写法,直接传递正确的一维参数数组给WP_Query - 新增
is_user_logged_in()检查,让代码逻辑更严谨,用户体验更好 - 删除了未使用的
$author_posts变量,精简代码 - 给日期和作者信息加了简单的内联样式,让排版更清晰(你可以换成自定义CSS类)
修改后,页面就能准确显示当前登录用户的所有帖子了。
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

