今天无意间发现,标签目录分页后,点选下一页的时候会出现404错误。
待解决标签过次页问题后,已能正确显示后。进一步测试网站时,又发现网站的搜索结果页,在过次页问题上再次出现了404错误。
百度了一下这个问题,发现这算是wordpress的一个通病,很多人都遇到了这个问题,但是解决办法基本上仅适用老版本的wordpress,新版本的已经不能按照教程适用了。
通过多次测试,wordpress4.9.7版本,修改中文标签、标签分页、搜索分页404的解决办法如下:
首先是修改标签中文404的问题:
找到wordpress网站目录WP-include/class-wp.php(需要修改两处)
找到
$pathinfo = $_SERVER[‘PATH_INFO’;
替换为:
$pathinfo = mb_convert_encoding($_SERVER[‘PATH_INFO’], ‘UTF-8’, ‘GBK’);
找到
$req_uri = $_SERVER[‘REQUEST_URI’;
替换为:
$req_uri = mb_convert_encoding($_SERVER[‘REQUEST_URI’], ‘UTF-8’, ‘GBK’);
如果修改正确的话,现在,wordpress网站点击中文标签已经可以正常显示页面,但是如果出现多个分页,点击下一页时,依旧会出现404错误。
接下来,我们来修改标签中文分页404的问题:
找到wordpress网站目录wp-includes目录中的link-template.php文件
找到
$result = $base . $request . $query_string;
替换为
$result = $base . mb_convert_encoding($request, ‘UTF-8’, ‘GBK’) . $query_string;
如果修改正确的话,现在,wordpress网站点击中文标签的过次页也已经可以正常显示页面。
最后,我们来修改搜索分页404的问题:
在当前主题的functions.php文件第一行代码 <?php 下面添加以下代码:
function tongleer_search_url_rewrite() {
if ( is_search() && ! empty( $_GET[‘s’] ) ) {
wp_redirect( home_url( “/search/” ) . urlencode( get_query_var( ‘s’ ) ) );
exit();
}
}
add_action( ‘template_redirect’, ‘tongleer_search_url_rewrite’ );
修改文章分页链接404的问题:
将下面代码添加到当前主题 functions.php中:
// 适合/%post_id%.html分页链接修正
class Rewrite_Inner_Page_Links_id{
var $separator;
function __construct(){
$this->separator = ‘/page-‘;
if( !is_admin() || defined( ‘DOING_AJAX’ ) ) :
add_filter( ‘wp_link_pages_link’, array( $this, ‘inner_page_link_format’ ), 10, 2 );
add_filter( ‘get_comments_pagenum_link’, array( $this, ‘comment_page_link_format’ ) );
add_filter( ‘redirect_canonical’, array( $this, ‘cancel_redirect_for_paged_posts’ ), 10, 2 );
endif;
if( is_admin() ) :
add_filter( ‘rewrite_rules_array’, array( $this, ‘pagelink_rewrite_rules’ ) );
register_activation_hook( __FILE__, array( $this, ‘flush_rewrite_rules’ ) ) ;
register_deactivation_hook( __FILE__, array( $this, ‘flush_rewrite_rules’ ) );
endif;
}
function flush_rewrite_rules(){
flush_rewrite_rules();
}
// 修改post分页链接的格式
function inner_page_link_format( $link, $number ){
if( $number > 1 ){
if( preg_match( ‘%<a href=”.*\.html/\d*”%’, $link ) ){
$link = preg_replace( “%(\.html)/(\d*)%”, $this->separator.”$2$1″, $link );
}
}
return $link;
}
// 为新的链接格式增加重定向规则,移除原始分页链接的重定向规则,防止重复收录
function pagelink_rewrite_rules( $rules ){
foreach ($rules as $rule => $rewrite) {
if ( $rule == ‘([0-9]+).html(/[0-9]+)?/?$’ ) {
unset($rules[$rule]);
}
}
$new_rule[‘([0-9]+)(‘.$this->separator.'([0-9]+))?.html/?$’] = ‘index.php?p=$matches[1]&page=$matches[3]’;
return $new_rule + $rules;
}
// 禁止WordPress将页面分页链接跳转到原来的格式
function cancel_redirect_for_paged_posts( $redirect_url, $requested_url ){
global $wp_query;
if( is_single() && $wp_query->get( ‘page’ ) > 1 ){
return false;
}
return true;
}
}
new Rewrite_Inner_Page_Links_id();
自此,如果顺利的话,wordpress4.9.7版本已经可以支持中文标签、中文标签分页面、搜索结果分页面。
——百花谷博客2018年7月19日原创。
未经允许不得转载:百花谷博客 » wordpress中文标签、标签分页、搜索分页404的解决办法