为什么分页不起作用并在WordPress网站上显示404错误()

美好的一天!问题是这样的:当你单击404错误的第2页时, 在模板类别(档案库)中, 分页不起作用。请帮忙不明白怎么解决, 已经全死了
我的循环:

< ?php $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1; $arg = array( 'cat' => get_queried_object_id(), 'post_type'=> 'post', 'posts_per_page'=> 9, //'order'=> 'desc', 'paged' => $paged, ); $query = new WP_query($arg); if($query-> have_posts()) : ?> < section class="blog"> < ?php echo '< div class="row"> '; $i=0; $formcreated=false; while( $query-> have_posts() ) : $query-> the_post(); // display post endwhile; wp_reset_postdata(); endif; ?> < div class="pagination"> < ?php if (function_exists('custom_pagination')) { custom_pagination($query-> max_num_pages, "", $paged); } ?> < ?php wp_reset_postdata(); ?> < /div>

和我的自定义分页:
function my_post_queries( $query ) { // do not alter the query on wp-admin pages and only alter it if it's the main query if (!is_admin() & & $query-> is_main_query()){// alter the query for the home and category pagesif(is_category()){ $query-> set('posts_per_page', 1); $query-> set('post_type', 'product'); }} } add_action( 'pre_get_posts', 'my_post_queries' ); function custom_pagination($numpages = '', $pagerange = '', $paged='') {if (empty($pagerange)) { $pagerange = 2; }/** * This first part of our function is a fallback * for custom pagination inside a regular loop that * uses the global $paged and global $wp_query variables. * * It's good because we can now override default pagination * in our theme, and use this function in default queries * and custom queries. */ global $paged; if (empty($paged)) { $paged = 1; } if ($numpages == '') { global $wp_query; $numpages = $wp_query-> max_num_pages; if(!$numpages) { $numpages = 1; } }/** * We construct the pagination arguments to enter into our paginate_links * function. */ $pagination_args = array( 'base'=> get_pagenum_link(1) . '%_%', 'format'=> 'page/%#%', 'total'=> $numpages, 'current'=> $paged, 'show_all'=> False, 'end_size'=> 1, 'mid_size'=> $pagerange, 'prev_next'=> True, 'prev_text'=> __('& #60; '), 'next_text'=> __('& #62; '), 'type'=> 'plain', 'add_args'=> false, 'add_fragment'=> '' ); $paginate_links = paginate_links($pagination_args); if ($paginate_links) { echo "< nav class='custom-pagination'> "; echo $paginate_links; echo "< /nav> "; }}

#1由于最近在两个不同的论坛中都提到了这一点, 所以我在回答这个问题。
如果你使用自定义分页, 例如你正在使用的分页似乎来自http://callmenick.com/post/custom-wordpress-loop-with-pagination, 但它也发生在Genesis子主题中, 因为父主题编号分页是什么人。
为什么会显示404页面? callmenick.com和Genesis(genesis_posts_nav)中的Custom分页用于主要查询, 因此, 如果你不同查询的分页位于阅读设置(为主要查询设置)中的每页帖子数之下, 在第2页上获取404。
WordPress网站上的每个前端页面请求都会产生一个主查询。 WordPress决定加载的模板基于该主查询的结果(你可以通过查看” 操作参考” 页面来查看WordPress执行这些操作的顺序)。尽管实际上你从未输出过该查询的结果, 但它仍在运行, 并且对于分页归档, 如果你尝试将该分页用于其他查询, 则这是一个问题。 -米洛https://wordpress.stackexchange.com/a/120963/64742
你不会看到太多这个问题, 因为许多人只是为该循环建立分页, 而不是从functions.php文件或父主题重新使用它。你可以在这里了解到:https://codex.wordpress.org/Function_Reference/paginate_links
让我们从顶部开始, 每当编写代码时, 在wp-config.php中打开调试功能
我的cpt存档中有一个基本的自定义循环。
archive-product.php
< ?php $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1; $product_args = array( 'post_type' => 'product', 'posts_per_page' => 2, //the same as the parse_query filter in our functions.php file 'paged' => $paged, 'page' => $paged ); $product_query = new WP_Query( $product_args ); ?> < ?php if ( $product_query-> have_posts() ) : ?> < !-- the loop --> < ?php while ( $product_query-> have_posts() ) : $product_query-> the_post(); ?> < article class="loop"> < h3> < ?php the_title(); ?> < /h3> < div class="content"> < ?php the_excerpt(); ?> < /div> < /article> < ?php endwhile; ?> < !-- end of the loop --> < !-- pagination here --> < ?php if (function_exists( 'custom_pagination' )) : custom_pagination( $product_query-> max_num_pages, "", $paged ); endif; ?> < ?php wp_reset_postdata(); ?> < ?php else:?> < p> < ?php _e( 'Sorry, no posts matched your criteria.' ); ?> < /p> < ?php endif; ?>

在你的functions.php文件中:
了解条件。 https://codex.wordpress.org/Conditional_Tags https://codex.wordpress.org/Function_Reference/is_post_type_archive
/** * Posts per page for CPT archive * prevent 404 if posts per page on main query * is greater than the posts per page for product cpt archive * * thanks to https://sridharkatakam.com/ for improved solution! */function prefix_change_cpt_archive_per_page( $query ) {//* for cpt or any post type main archive if ( $query-> is_main_query() & & ! is_admin() & & is_post_type_archive( 'product' ) ) { $query-> set( 'posts_per_page', '2' ); }} add_action( 'pre_get_posts', 'prefix_change_cpt_archive_per_page' ); /** * * Posts per page for category (test-category) under CPT archive * */ function prefix_change_category_cpt_posts_per_page( $query ) {if ( $query-> is_main_query() & & ! is_admin() & & is_category( 'test-category' ) ) { $query-> set( 'post_type', array( 'product' ) ); $query-> set( 'posts_per_page', '2' ); }} add_action( 'pre_get_posts', 'prefix_change_category_cpt_posts_per_page' ); /** * * custom numbered pagination * @http://callmenick.com/post/custom-wordpress-loop-with-pagination * */ function custom_pagination( $numpages = '', $pagerange = '', $paged='' ) {if (empty($pagerange)) { $pagerange = 2; }/** * This first part of our function is a fallback * for custom pagination inside a regular loop that * uses the global $paged and global $wp_query variables. * * It's good because we can now override default pagination * in our theme, and use this function in default queries * and custom queries. */ global $paged; if (empty($paged)) { $paged = 1; } if ($numpages == '') { global $wp_query; $numpages = $wp_query-> max_num_pages; if(!$numpages) { $numpages = 1; } }/** * We construct the pagination arguments to enter into our paginate_links * function. */ $pagination_args = array( 'base'=> get_pagenum_link(1) . '%_%', 'format'=> 'page/%#%', 'total'=> $numpages, 'current'=> $paged, 'show_all'=> False, 'end_size'=> 1, 'mid_size'=> $pagerange, 'prev_next'=> True, 'prev_text'=> __('& laquo; '), 'next_text'=> __('& raquo; '), 'type'=> 'plain', 'add_args'=> false, 'add_fragment'=> '' ); $paginate_links = paginate_links($pagination_args); if ($paginate_links) { echo "< nav class='custom-pagination'> "; echo "< span class='page-numbers page-num'> Page " . $paged . " of " . $numpages . "< /span> "; echo $paginate_links; echo "< /nav> "; }}

#2在wp-include / functions.php上
【为什么分页不起作用并在WordPress网站上显示404错误()】添加这些行
function my_pagination_rewrite() { add_rewrite_rule('([a-z]+)/page/?([0-9]{1, })/?$', 'index.php?category_name=$matches[1]& paged=$matches[2]', 'top'); }add_action('init', 'my_pagination_rewrite');

    推荐阅读