WordPress have_posts()不返回私密文章
问题描述
在我的主题中,category.php页面的代码如下:
<?php while (have_posts()) : the_post(); ?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<?php
echo '<a href="'.get_the_permalink().'"><h3>'.get_the_title().'</h3></a>';
?>
?>
如果所属分类的帖子已发布,则会在分类页面显示。但是,如果将它们设置为私密,则不会显示。
如何让私密的帖子也显示出来?
解决方案
Published
和 private
是两个独立的设置,一个是状态,另一个是可见性。一篇帖子可以同时被设置为 published
和 private
。如果是这种情况,它将在 have_posts()
中对于已登录的管理员和拥有帖子的编辑(并且标题有“私密:”前缀)显示。草稿永远不会显示。
post status
= published
| draft
post visibility
= public
| private
| password protected
如果你想覆盖默认行为,你必须使用自己的WPQuery或者使用类似以下的方法更改主查询:
function my_private_posts_in_categories(query) {
if(query->is_main_query() && query->is_category()) {query->set('post_status', ['private', 'publish']);
$query->set('posts_per_page', 15);
}
}
add_action('pre_get_posts', 'my_private_posts_in_categories');