我对大多数存档页面使用自定义$wp\\u查询,如分类法、索引、类别和作者页面。一切正常,除了一件奇怪的事情——作者模板页面分页失败。分页停止在第2页上工作,它直接指向404页。在其他存档页上分页,效果很好。
这是我的作者代码。php模板:
<?php get_header(); ?>
<section id="primary">
<div id="content" role="main">
<?php $curauth = (isset($_GET[\'author_name\'])) ? get_user_by(\'slug\', $author_name) : get_userdata(intval($author));
?>
<?php toolbox_content_nav( \'nav-above\' ); ?>
<?php
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
$args = array(
\'showposts\'=> 2,
\'paged\' => $paged,
\'post_type\'=> array(\'cpt1\',\'cpt2\'));
$query = new WP_Query( $args );
?>
<?php if ($query ->have_posts() ) : ?>
<h1>Posts from <?php echo $curauth->first_name; ?> </h1>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<li>
<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link: <?php the_title(); ?>">
<?php the_title(); ?></a>,
<?php the_time(\'d M Y\'); ?> in <?php the_category(\'&\');?>
</li>
<?php endwhile; ?>
<?php wp_pagenavi( array( \'query\' => $query) ); ?>
<?php else : ?>
<article id="post-0" class="post no-results not-found">
<header class="entry-header">
<h1 class="entry-title"><?php _e( \'Nothing Found\', \'toolbox\' ); ?></h1>
</header><!-- .entry-header -->
<div class="entry-content">
<p><?php _e( \'It seems we can’t find what you’re looking for. Perhaps searching can help.\', \'toolbox\' ); ?></p>
<?php get_search_form(); ?>
</div><!-- .entry-content -->
</article><!-- #post-0 -->
<?php endif; ?>
</div><!-- #content -->
</section><!-- #primary -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
无论如何,我都在使用wp\\u pagenavi插件进行分页。显然,wp\\u pagenavi知道有页面(因为它在分页链接上显示了不止一个页面),但当我转到第二页时,发现没有找到帖子(404页)。
我已经在google上搜索了这个问题,并应用了我搜索到的所有建议,但仍然没有任何帮助。问题是什么?
最合适的回答,由SO网友:Milo 整理而成
这里有几个问题,主要问题是您的查询将每页的帖子设置为两个,但可用的页面数与您的自定义查询没有关系。如果您的“阅读设置”下的“博客页面最多显示”设置为10,并且作者只有<;=10篇帖子,没有第二页。
您将发现的另一个问题是,您没有在查询中设置author参数,因此您没有从特定的作者那里获取帖子。
要解决这两个问题,并消除创建辅助查询以替换默认查询时的资源浪费,您应该从模板中删除所有这些内容,而不是使用pre_get_posts
在您的functions.php
. 这样,分页将自动处理。
function wpa63043_author_pre_get( $query ) {
if ( $query->is_author() && $query->is_main_query() ) :
$query->set( \'posts_per_page\', 2 );
$query->set( \'post_type\', array(\'cpt1\',\'cpt2\') );
endif;
}
add_action( \'pre_get_posts\', \'wpa63043_author_pre_get\' );
SO网友:smogg
尝试更改您的页面标记。如果我没记错的话,它不能与自定义帖子类型相同。
@编辑:我现在没有时间检查,但以下是可能导致此问题的原因:
您有url为的页面yoursite.com/author
.您的站点可以使用以下链接显示单个作者,示例中名为“John”:yoursite.com/author/john/
. 尝试添加导航时,将创建以下url:yoursite.com/author/page/2
. WordPress假设示例中的单词“page”实际上是作者的名字,而作者的名字并不存在,这就是为什么你会得到404错误。如果您更改url以显示单个作者John:yoursite.com/author/john
和列出所有作者的页面:yoursite.com/authors/
(已添加s), 这样就不会有url问题。