美好的一天!问题是这样的:当你单击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');
推荐阅读
- 为什么我们不应该在wordpress多站点上使用”www”
- 以太网链路聚合
- 无法删除的文件夹怎么办(如何删除删不掉的文件夹)
- oeasy教您玩转vim - 55 - # 参数替换
- pfSense安装Squid和配置ClamAV
- 如何查看电脑CPU温度,笔记本温度显示怎么开启
- 生成树协议(STP)与MSTP
- 电脑没声音了如何恢复(电脑没有声音在哪里设置)
- 静态VLAN和静态路由