You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress自定义重写规则导致常规文章无法访问问题求助

问题分析与修复方案

你的问题出在template_include过滤器的回调函数上——你没有接收过滤器传递的默认模板参数,也没有在不匹配自定义规则时返回原模板。当访问常规文章时,get_query_var('ztest')为假,此时$template变量未定义,WordPress找不到要加载的模板,就会显示空白页面。

修复后的完整插件代码

<?php
/**
 * Plugin Name: URL Rewrite Test
 */
add_action('init', 'z_add_rewrite_rules');
function z_add_rewrite_rules(){
 add_rewrite_rule('^ztest/([a-z0-9-]+)[/]?$','index.php?ztest=$matches[1]','top');
}

add_filter('query_vars','z_set_query_vars');
function z_set_query_vars($query_vars){ // 接收原查询变量集合,避免覆盖其他自定义变量
 $query_vars[] = 'ztest';
 return $query_vars;
}

add_filter('template_include','z_include_template');
function z_include_template($template){ // 接收WordPress传递的默认模板路径
 if(get_query_var('ztest')){
 // 自定义模板路径
 $new_template = plugin_dir_path(__FILE__).'/template.php';
 if(file_exists($new_template)){
 $template = $new_template;
 }
 }
 // 无论是否匹配自定义规则,都返回有效模板路径
 return $template;
}
?>

关键修改点说明

  1. 为z_include_template添加参数$template:这个参数是WordPress自动传递的默认模板路径(比如文章对应的single.php、页面对应的page.php),确保不触发自定义规则时,能正常返回常规内容的模板。
  2. 优化z_set_query_vars函数:添加原$query_vars参数作为输入,避免覆盖其他插件或主题添加的自定义查询变量,这是更规范的写法。
  3. 确保始终返回有效模板:无论是否匹配自定义规则,函数最后都会返回$template,不会出现变量未定义导致的空白问题。

最后一步:刷新重写规则

虽然你已经设置了固定链接为“文章名称”,建议再次进入WordPress后台的设置→固定链接页面,直接点击“保存更改”按钮,确保新的重写规则被正确写入.htaccess文件(或WordPress的重写规则缓存)。

修改完成后,访问常规文章(比如localhost:81/wordpress572/hello-world/)就能正常加载默认模板,访问自定义规则的URL(localhost:81/wordpress572/ztest/asdf/)也能正确加载你的template.php了。

内容的提问来源于stack exchange,提问作者ZedBee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 04:52:41