为了进一步了解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错误;
任何帮助都将不胜感激。我觉得我错过了什么。
最合适的回答,由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