WordPress:如何结合get_query_var实现多URL(文件读取)触发模板包含?
多URL定向并结合get_query_var的实现方案
步骤1:准备urls.txt规则文件
把需要触发定向的URL规则写入文件,放在WordPress主题根目录(和functions.php同目录),支持两种格式:
- 纯路径(不带首尾斜杠):每行一个目标路径,比如
pagename another-target-page custom-path - 路径+query变量组合:用
|分隔路径和query条件,比如pagename|ref=special another-target-page|action=load&type=vip
步骤2:替换functions.php中的代码
把原来的单URL判断代码替换成以下逻辑,实现多规则匹配+query变量验证:
add_action('wp', function() { // 定义规则文件路径 $urls_file = get_stylesheet_directory() . '/urls.txt'; // 容错:文件不存在直接返回,避免报错 if (!file_exists($urls_file)) { return; } // 读取规则文件,自动忽略空行和换行符 $url_rules = file($urls_file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // 获取当前请求的路径(去除首尾斜杠) $current_path = trim(parse_url(add_query_arg(array()), PHP_URL_PATH), '/'); // 遍历规则逐一匹配 foreach ($url_rules as $rule) { $rule_parts = explode('|', $rule); $target_path = trim($rule_parts[0]); // 先匹配路径,不匹配直接跳过当前规则 if ($current_path !== $target_path) { continue; } // 如果规则包含query条件,验证对应query变量 if (isset($rule_parts[1])) { parse_str($rule_parts[1], $query_conditions); $is_query_match = true; foreach ($query_conditions as $key => $value) { if (get_query_var($key, '') !== $value) { $is_query_match = false; break; } } // query不匹配则跳过 if (!$is_query_match) { continue; } } // 路径匹配(且query验证通过),加载目标脚本并终止后续流程 include(locate_template('give_some.php')); exit(); } });
代码说明
- 规则兼容:同时支持纯路径和带query条件的规则,无需额外修改代码
- query验证:用
get_query_var()读取当前请求的query参数,和规则中的条件逐一比对 - 容错处理:加入文件存在检查,避免因文件缺失导致站点报错
- 性能优化:匹配到第一个符合条件的规则后立即执行脚本,减少不必要的遍历
内容的提问来源于stack exchange,提问作者James Son
相关产品推荐
相关产品推荐

