有道友提出“如何在wordpress中创建配置自己的重写规则”一问,特意整理了自己的部分理解作一总结:
关于wordpress的重写规则,可以查看wp-includes/rewrite.php源码
wordpress通过flush_rewrite_rules向options数据表保存规则内容。
通常,使用add_rewrite_rule这个函数即可实现简单的重写规则的添加动作;
还有add_rewrite_tag、add_permastruct等等,不过这些在应用简单的重写规则时没有add_rewrite_rule来得直接。
需要注意的是,add_rewrite_rule之后要想起到预期的效果,必须执行flush_rewrite_rules动作,但不建议利用代码多次执行flush操作。而应该在需要的时候再执行,比如插件启用时由register_activation_hook这个钩子发起该动作,或者需要时再到后台固定链接里点保存按钮也可以实现该动作。
— 举例 —
比如新创建个movies页面,用来介绍指定的电影信息,则该页面的完整url地址应为:
http://mydomain.com/index.php?pagename=movies&movie_name=killbill
movie_name是想传入的参数
现在需重写为
http://mydomain.com/movies/killbill
步骤:
1、add_rewrite_rule
add_action( 'init', 'wpdit_bq1579112796568320460' ); function wpdit_bq1579112796568320460() { // 添加该规则后需手动执行flush write rules,参考上面的说明 add_rewrite_rule( // 该正则用来匹配传入的URL 'movies/([^/]+)/?', // `pagename` 代表这是个页面 // `movie_name` 用来保存匹配到内容 'index.php?pagename=movies&movie_name=$matches[1]', // rewrite rules提供的其实是一组数组用来匹配传入的URL // 所以,当有近似的正则匹配时,总是第1个匹配到的被返回 // 因这个重写规则为后加的特定规则,故将此添加到顶部 'top' ); }
2、添加query_vars
wordpress内置了一组查询变量存于query_vars,不在其内的变量会被忽略;
所以需事先告诉wordpress关于movie_name是什么,并允许movie_name这个变量以便后面的引用。
添加方法:
add_filter( 'query_vars', 'wpdit_bq1579112796568320460_query_vars' ); function wpdit_bq1579112796568320460_query_vars( $query_vars ) { $query_vars[] = 'movie_name'; return $query_vars; }
最后,后台设置固定链接里,点击保存按钮后就可以访问http://mydomain.com/movies/killbill试试效果了。
可以在当前皮肤的page.php里置入下面的代码:
echo get_query_var('movie_name');
看能否显示出killbill.
链接:
如何在wordpress中创建配置自己的重写规则
Need help with add_rewrite_rule
How does one flush rules on theme activation or deactivation only?
这个重写规则按理来说 对WordPress的附件页面有一定的作用吧
无聊进来转转!