WordPress重写规则生效但is_catalog函数失效,求技术协助
问题分析与解决方案
你的重写规则已生效但is_catalog()函数无法正常工作,主要是变量传递细节、函数返回值不完整或调用时机不对导致的,以下是具体修复步骤:
1. 修正重写规则的变量捕获
原规则中使用$matches[0]虽理论上能匹配到catalog,但用明确的捕获组更稳妥,可避免潜在匹配异常:
add_rewrite_rule( '^(catalog)$', 'index.php?expage=$matches[1]', 'top' );
修改后记得刷新WordPress重写规则:进入后台「设置」→「固定链接」,无需修改任何选项,直接点击「保存更改」即可触发规则刷新。
2. 完善is_catalog()函数
原函数仅在条件满足时返回true,不满足时无返回值(默认返回null),这会导致if判断逻辑异常;同时使用get_query_var时建议指定默认值,避免未定义情况:
function is_catalog(){ // 获取expage变量,默认值为false $expage = get_query_var('expage', false); // 严格匹配并返回布尔值 return $expage === 'catalog'; }
或者直接通过全局$wp_query对象获取变量,兼容性更强:
function is_catalog(){ global $wp_query; return isset($wp_query->query_vars['expage']) && $wp_query->query_vars['expage'] === 'catalog'; }
3. 确认函数调用时机
确保is_catalog()在WP_Query初始化完成后调用,比如:
- 在主题模板文件(如
header.php、page.php或自定义模板)中调用 - 挂载到
template_redirect这类较晚的钩子上执行,示例:
add_action('template_redirect', function(){ if(is_catalog()){ // 执行你的逻辑 } });
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

