我认为你根本不需要重写规则。打开时,只需更改主查询即可archive.php
, 像这样:
add_action( \'pre_get_posts\', \'show_all_posts\' );
function show_all_posts( $query ) {
if( ! is_admin() && is_archive() && $query->is_main_query() {
$query->set( \'post_status\', \'publish\' );
}
}
以上内容适用于所有存档页面。如果您只想在“最新”页面上使用,请按以下方式进行更改:
add_action( \'pre_get_posts\', \'show_all_posts\' );
function show_all_posts( $query ) {
if( ! is_admin() && is_page( \'latest\' ) && $query->is_main_query() {
$query->set( \'post_status\', \'publish\' );
}
}
如果您没有“最新”页面,可以创建一个页面并将其留空。然后,您可以创建一个名为
latest.php
并将其分配到“最新”页面。在里面
latest.php
, 只需这样说:
get_template_part( \'archive\' );
它看起来就像你的
archive.php
样板
UPDATE
如果您不想创建空白页,那么您可以创建一个“最新”类别,并为该类别页分配一个模板?我想,客户对某个类别做不了多少手脚。。。这并不意味着你必须将所有帖子添加到“最新”类别;你仍然需要使用
pre_get_posts
更改主查询,使其不会仅返回“最新”类别中的帖子(实际上为空),而是返回所有类别中的帖子(因此,所有现有帖子)。
add_action( \'pre_get_posts\', \'show_all_posts\' );
function show_all_posts( $query ) {
if( ! is_admin() && is_category( \'latest\' ) && $query->is_main_query() {
$query->set( \'post_status\', \'publish\' );
$query->set( \'category__in\', $all_posts );
}
}
注意我的变化
is_page( \'latest\' )
到
is_category( \'latest\' )
. 此外
$all_posts
变量必须是包含所有类别ID的数组。我不知道你怎样才能做到这一点,但我想这一定很容易做到。
我从来没有测试过这个,这只是一个想法。希望有帮助!