wordpress 自定义路由及展示页

背景:

我想实现一个特殊的响应,流程如下:访问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



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值