板邓: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规则了。

posted @ 2018-04-07 12:41  贵隆  阅读(627)  评论(0编辑  收藏  举报