php - 修复 Wordpress 5.5 更新后的分页
问题描述
将我的网站更新到 Wordpress 5.5 后,分页中断了。
如果example.com/news/是我网站的新闻页面,那么跟随example.com/news/2/(在更新前打开第二页帖子)会将我重定向到 example.com/news/。
这是5.5 更新的一个已知问题,但我无法通过更改变量名称来解决它。
以下是我在网站上使用分页的方式:
查询部分:
$page = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;
$query = new WP_Query( array(
'posts_per_page' => 5,
'paged' => $page
));
if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post();
分页部分:
echo paginate_links( array (
'base' => get_permalink( get_option( 'page_for_posts' ) ) . '%_%',
'total' => $query->max_num_pages,
'current' => max( 1, get_query_var( 'page' ) ),
'format' => '%#%',
'show_all' => false,
'type' => 'plain',
'end_size' => 2,
'mid_size' => 1,
'prev_next' => true,
'prev_text' => '←',
'next_text' => '→',
'add_args' => false,
'add_fragment' => '',
));
wp_reset_postdata();
使用其中任何一个:
remove_filter('template_redirect', 'redirect_canonical');
remove_action('template_redirect', 'redirect_canonical');
在 example.com/news/2/ 上导致 404 错误。
解决方案
pre_handle_404
在不触及核心的情况下进行临时修复:通过主题 functions.php 中的过滤器禁用分页 URL 的 404 处理:
function pre_handle_404($preempt, $wp_query)
{
if (isset($wp_query->query['page']) && $wp_query->query['page']) {
return true;
}
return $preempt;
}
add_filter( 'pre_handle_404', 'pre_handle_404', 10, 2 );
推荐阅读
- javascript - 在 jQuery Validator 中允许带有字母数字规则的空格
- python - Python 查询中的“或”运算符
- python - 为什么从 np.ones 和 np.zeros 创建的图像都显示黑色空白图像,而将两者结合起来会产生预期的黑白混合图像?
- javascript - 如何使用 jquery ajax 服务器端将 Id 添加到行
- sql - 如何为此 SQL 查询编写 linq 查询?
- sublimetext3 - 如何在 Sublime Text 3 中为特定语法设置保存文件的默认文件扩展名
- java - 在 intellj gradle 中创建一个空项目并添加 Micronaut 项目的新模块不起作用
- r - 对所有列进行变异并计算两个日期之间的差异
- amazon-web-services - 在 terraform 中授予 aws ec2 实例对 aws secretsmanager 的访问权限
- sqlite - 在 SQLite 表中强制执行顺序 rowid