wordpress 自定义路由及展示页

来源:互联网 发布:大连磐海数据有限公司 编辑:程序博客网 时间:2024/06/11 05:01

背景:

我想实现一个特殊的响应,流程如下:访问domain/test,响应一个表单页面,填写并提交表单页面后,wordpress进行响应(wordpress处理ajax请求)。


key point 1、怎么注册domain/test这个路由(add_rewrite_rule())?

key point 2、怎么响应domain/test这个请求(template_redirect)?


实现过程:

首先,wordpress 有重写url的方法,叫 add_rewrite_rule()。在function.php中加入如下代码段:

// 添加路由重写,每次修改完记得在wp-admin后台“设置”-》“固定链接”=》“保存”才能生效add_action('init', 'theme_functionality_urls');function theme_functionality_urls() {        add_rewrite_rule('^test','index.php?test=1','top');}
这段代码的意思就是把domain?test=1改写成domain/test,top意思是把这个规则放到最前面。

此时,当你访问domain/test跟访问domain?test=1的效果是一样的。

但是,我们原本也没有对domain?test=1这样的请求进行响应。所以1、当请求domain?test=1的时候,我们怎么获取到这个test的值?2、怎么对这个请求进行响应?

add_action('query_vars', 'test_add_query_vars');function test_add_query_vars($public_query_vars){    $public_query_vars[] = 'test';     return $public_query_vars;}
这段代码的意思是在执行到query_vars这个钩子的时候,给$public_query_vars数组里面添加一个test字段,这个test字段就是当访问domain?test=1的时候的test的字段。当添加test到$public_query_vars之后,会检查每个请求url里是否包含test字段。

//模板载入规则   add_action("template_redirect", 'test_template_redirect');function test_template_redirect(){    global $wp;    global $wp_query;    $reditect_page =  $wp_query->query_vars['test'];        if ($reditect_page == "1"){           include(TEMPLATEPATH.'/test/test.php');           die();       }   }  

这段代码的意思是这样的,首先,这个TEMPLATEPATH是你的主题路径,连着/test/test.php相当于在你的主题目录下新建了一个test目录,test目录里有一个test.php文件。

所有的请求都会走这个方法,但是,唯独请求url中包含test字段并且test的值为1的时候会转至我们新建的/test/test.php页面。然后die()掉。


至此,当我们访问domain/test的时候,相当于在访问domain?test=1这个url,并且会把我们自定义的template展示出来。



我在这个test.php中写了一个表单,通过ajax请求打到wordpress后台进行处理,具体可以参考《wordpress处理ajax请求》。



参考:

http://www.ashuwp.com/courses/highgrade/318.html

https://www.iteblog.com/archives/1988.html



原创粉丝点击