WordPress自定义URL重写规则配置求助:实现日历URL结构
嘿,你已经走对路子啦!咱们把这个自定义日历URL结构的方案补全,确保它能完美跑起来:
实现自定义日历URL的完整步骤
1. 优化并重写规则
你写的基础规则没问题,但可以让正则更精准(只匹配4位年份和2位月份,避免错误匹配),同时补全钩子参数:
function custom_rewrite_rule() { // 用\d{4}匹配4位年份,\d{2}匹配2位月份,更严谨 add_rewrite_rule( '^calendar\/(\d{4})\/(\d{2})\/?$', 'index.php?page_id=305&calyear=$matches[1]&calmonth=$matches[2]', 'top' ); } // 把规则挂载到init钩子,优先级10是默认值 add_action('init', 'custom_rewrite_rule', 10);
2. 注册自定义查询变量
WordPress默认会过滤掉calyear和calmonth这类自定义参数,得告诉它允许这两个变量通过:
function custom_query_vars($vars) { $vars[] = 'calyear'; $vars[] = 'calmonth'; return $vars; } add_filter('query_vars', 'custom_query_vars');
这一步绝对不能少,不然页面根本拿不到年月参数。
3. 刷新重写规则缓存
写完代码后,一定要去WordPress后台的「设置」→「固定链接」页面,随便选一个固定链接结构(比如「文章名」),然后点击「保存更改」。这一步是让WordPress刷新重写规则缓存,新添加的规则才会生效。
4. 在页面模板中获取并使用参数
现在你可以在ID为305的页面模板里,轻松获取年月参数了:
// 获取自定义查询变量 $cal_year = get_query_var('calyear'); $cal_month = get_query_var('calmonth'); // 可以加个简单验证,确保参数有效 if ($cal_year && $cal_month) { // 在这里处理日历逻辑,比如渲染2019年4月的日历内容 }
额外小提示
- 如果遇到404错误,先检查固定链接是否保存过,再核对正则表达式有没有写错;
- 不要把
flush_rewrite_rules()放在init钩子里(会每次加载页面都刷新规则,拖慢性能),如果需要手动刷新,可以临时在函数里加一次,刷新后删掉就行; - 确保page_id=305的页面已经正确关联了你要用来展示日历的模板。
内容的提问来源于stack exchange,提问作者lior r
相关产品推荐
相关产品推荐

