分页不使用自定义类别模板

时间:2016-08-16 作者:None

为了进一步了解wordpress,我一直在从头开发一个主题,并使用插件ACF和CPT UI,以创建一个简单直观的后台界面。

我的问题是在前端。我一直在为主页创建分页(使用自定义查询),效果非常好。对于类别页面(在名为category.php的模板中),情况并非如此。

为了找到一个解决方案,我已经在google上搜索了几个小时,但当我对permalinks没有任何问题时,一切似乎都与permalinks有关(我使用的是默认结构/%postname%/)。

以下是我的分类页面的代码,包括自定义循环和分页:

<?php
$paged = ( get_query_var(\'page\') ) ? get_query_var(\'page\') : 1;
$my_videos = new WP_Query(array(
   \'post_type\' => \'video\', 
   \'category_name\' => single_cat_title(\'\', false), 
   \'posts_per_page\' => 6
)); 
 if ( $my_videos->have_posts() ) :  
  while ($my_videos->have_posts()) : $my_videos->the_post();
   show_video_thumbnails();
  endwhile; 
else:  ?>
<p><?php _e( \'Sorry, no posts matched your criteria.\' ); ?></p>
<?php endif; ?>

<!-- pagination here -->
<?php   next_posts_link( \'Older Entries\', $my_videos->max_num_pages );
        previous_posts_link( \'Newer Entries\' );
        wp_reset_postdata(); 
?>
在类别的第一页上一切都很好:分页可用,并显示“旧条目”。

但当点击链接时,我被重定向到/category/mycategoryname/page/2(mycategoryname是我的类别名称),但它显示了404错误;

任何帮助都将不胜感激。我觉得我错过了什么。

1 个回复
最合适的回答,由SO网友:ngearing 整理而成

由于这是模板的主循环,因此不应创建新循环,而应使用pre_get_posts. 这样,您可以确保所有额外的查询参数都将被考虑在内。

您将如何执行此操作的示例:

add_action( \'pre_get_posts\', \'wpse5477_pre_get_posts\' );
function wpse5477_pre_get_posts( $query )
{
    if ( ! $query->is_main_query() || $query->is_admin() )
        return false; 

    if ( $query->is_category() ) {
        $query->set( \'post_type\', \'video\' );
        $query->set( \'posts_per_page\', 6 );
    }
    return $query;
}
此代码将进入您的functions.php.

首先,我们检查这是否是主循环,而不是您的管理区域。pre_get_posts 可能影响管理。

然后,如果这是一个类别,我们修改$query.

然后返回$query.

有关更多信息,请查看此处:https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts