板邓:WordPress中自定义、重置URL伪静态规则(rewrite rules)
使用add_rewrite_rule
现在我想把 https://www.iteblog.com?iteblog_hadoop
URL地址修改成 https://www.iteblog.com/wechat?iteblog_hadoop
,这种情况下我们可以使用 add_rewrite_rule($regex, $redirect, $after)
函数来实现,如下:
function iteblog_rewrite_rule() { add_rewrite_rule('wechat$', 'index.php?iteblog_hadoop'', 'top'); } add_action('init', 'iteblog_rewrite_rule');
add_rewrite_rule
函数中最后一个参数是可选的,只能是top或者bottom,意思是我们这个自定义规则是放在已有规则最前面(top)还是最后面(bottom);如果放在已有规则最前面,那么Wordpress会先使用这个rewrite rules;如果放在已有规则的最后面,那么Wordpress会优先使用已有的规则。这个参数默认值是bottom,我们需要根据自己的需求设置。
我们把上面的代码添加到 functions.php
文件里,保存。现在你访问 https://www.iteblog.com/wechat?iteblog_hadoop
页面不出意外的话肯定是返回的404!这是因为我们添加了自己的rewrite rules,需要到后台依次点击 设置 -> 固定链接
,然后点击里面的 保存修改 按钮,这时候我们的rewrite rules就已经添加进系统了,现在你可以访问 https://www.iteblog.com/wechat?iteblog_hadoop
页面了。
使用rewrite_rules_array
但是如果你需要自定义多条rewrite rules,add_rewrite_rule
函数就不行了,我们需要使用rewrite_rules_array
了,这属于Wordpress内置的hook,我们可以在里面添加很多条规则,使用如下:
function add_rewrite_rules($aRules){ $aNewRules = array( 'wechat$' => 'index.php?iteblog_hadoop' ); $aRules = $aNewRules + $aRules; return $aRules; } add_filter('rewrite_rules_array', 'add_rewrite_rules');
我们可以在 $aNewRules
是一个数组,所以可以在其中添加任意数量的规则。
移除已有的规则
我们也可以利用这个钩子来移除已经存在的规则,使用如下:
add_filter('rewrite_rules_array', 'kill_feed_rewrites'); function kill_feed_rewrites($rules){ foreach ($rules as $rule => $rewrite) { if ( preg_match('/^foo.*(feed)/',$rule) ) { unset($rules[$rule]); } } return $rules; }
好了,现在你可以自由地自定义URL规则了。