WordPress将自定义网址映射到函数

史蒂夫

我正在尝试向基于WordPress的网站添加自定义URL结构。

例如:

example.com/machines             //list all machines in a table

example.com/machines?some=params //list filtered machines in a table

example.com/machines/1           //show single machine

数据将来自我已经通过curl开发的外部api。

我无法将数据导入自定义帖子类型,因为它已在许多表上进行了规范化,业务逻辑很复杂,而且无论如何其他设备都使用了api。

我已经看过add_rewrite_rule的文档,但是第二个参数让我感到困惑

$redirect
(string) (required) The URL you would like to actually fetch

好吧,我没有要提取的网址,我想运行一个函数,它将充当一个简单的路由器-提取网址部分,调用外部api并返回包含正确数据的模板。

调用API很简单,但是我如何将url实际路由到该函数,以及随后如何加载模板(利用现有的WordPress header.php和footer.php)却让我感到困惑。

史蒂夫

经过大量的谷歌搜索和阅读一些好的 资源,我找到了解决方案。

第一步是用于add_rewrite_endpoint创建将映射到查询变量的基本URL:

add_action( 'init', function(){
    add_rewrite_endpoint( 'machines', EP_ROOT );
} );

在访问固定链接页面刷新重写规则之后,下一步是挂钩到该动作'template_redirect',当到达URL时实际执行某些操作

add_action( 'template_redirect', function(){
    if($machinesUrl = get_query_var('machines')){
        //var_dump($machinesUrl, $_GET);
        //$machinesURl contains the url part after example.com/machines
        //eg if url is example.com/machines/some/thing/else
        //then $machinesUrl == 'some/thing/else'
        //and params can be got at simply via $_GET
        //after parsing url and calling api, its just a matter of loading a template:
        locate_template( 'singe-machine.php', TRUE, TRUE );
        //then stop processing
        die();
    }
});

要做的另一件事是处理网址的匹配,而网址没有其他部分,例如example.com/machines事实证明,在某些情况下会带有wordpress胆量,空字符串被评估为false,因此被跳过,因此最后一步是连接到过滤器'request'并设置默认值:

add_filter( 'request', function($vars=[]){
    if(isset ( $vars['machines'] ) && empty ( $vars['machines'] )){
        $vars['machines'] = 'default';
    }
    return $vars;
});

通过将它们全部包装在一个或多个类中,可以很容易地改善它。可以将url解析和模板加载逻辑传递到基本路由器,甚至是基本的MVC设置,从文件加载路由等,但是在此之上是起点

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Git URL映射到自定义域

将自定义颜色渐变映射到POSIXct值

如何在Codigniter的select_sum()函数中将字段名称映射到自定义名称?

将自定义OpenID Connect声明映射到联系人属性

实体框架6将自定义SQL查询映射到实体

映射自定义函数

EntityFramework 6:如何将自定义类型映射到SQL表

通过Dapper中的类型处理程序将自定义对象映射到多列

将自定义函数映射到嵌套的小对象上

在一处将自定义异常映射到HTTP异常

将自定义子域映射到Azure存储容器

无需API网关即可将自定义域映射到AWS Lambda Function

将自定义枚举列表映射到scsm 2012 R2中扩展事件类中的自定义窗体属性

将自定义域(CNAME)映射到Azure存储以解决CORS相关问题?

将自定义PHP表单添加到Wordpress

无法从mongodb结果映射到Java自定义对象

将自定义侧边栏模板映射到任何名为“ index.rst”的文档

将自定义对象属性映射回原始对象

如何在Angular Js中将自定义指令映射到我的html页面

检索QueryString并强制将自定义网址转到页面

Swift 3,RxAlamofire并映射到自定义对象

将自定义三角形映射到相机的视角

Spring @RequestBody没有映射到自定义对象

将Mysql结果映射到自定义Json格式

如何将自定义域名映射到 Azure 服务器?

将自定义函数映射到小标题列表中的某些列

将自定义域映射到 GCP API 网关

将自定义元素添加到 wordpress 主页

将值向量映射到自定义值