chameleon2die4 / wp-router
将路径路由到WordPress中的回调函数。
Requires
- php: >=7.2.0
This package is auto-updated.
Last update: 2024-09-14 04:23:51 UTC
README
提供一个简单的API,用于将请求映射到回调函数。
描述
WordPress的重写规则和查询变量提供了一种强大的系统,用于将URL字符串映射到一系列帖子。每个请求都被解析为查询变量,并通过 $wp_query->query()
转换为SQL查询。
有时,你可能不想显示帖子列表。你只是想将一个URL映射到回调函数,并在你正在使用的主题中替换帖子内容。
这就是WP Router的作用。它处理注册帖子类型、查询变量、重写规则等繁琐的工作,并允许你编写代码来实现你想要的功能。只需一个函数调用,就可以将URL映射到指定的回调函数,并在页面上显示返回值。
安装
Composer
浏览到目录并运行;
$ composer require chameleon2die4/wp-router
要求
- PHP >= 7.0
卸载
删除包后,使用 flush_rewrite_rules()
函数。
用法
创建路由
- 你的插件应该挂钩到
wp_router_generate_routes
动作。回调函数应接受一个参数,即一个WP_Router
对象。 - 使用
WP_Router::add_route( $id, $args )
注册路由及其回调$id
是插件应使用的唯一字符串,用于识别路由$args
是一个关联数组,用于设置以下属性。任何省略的参数将使用默认值。-
path
(必需)- 一个正则表达式,用于与请求路径匹配。这对应于创建WordPress重写规则时使用的数组键。 -
query_vars
- 一个关联数组,其键为查询变量,值为路径正则表达式中对应的明确字符串或整数。任何包含在此处的查询变量将自动注册。 -
title
- 页面标题。 -
title_callback
- 用于动态生成标题的回调函数。默认为__()
。如果为NULL
,则直接使用title
参数。如果page_callback
或access_callback
返回FALSE
,则不会调用title_callback
。title_callback
可以是单个回调函数或一个数组,指定特定HTTP方法(例如GET
、POST
、PUT
、DELETE
等)的回调函数。如果是后者,如果当前请求方法没有匹配的键,则使用default
键。 -
title_arguments
- 一个查询变量的数组,其值将作为参数传递给title_callback
。默认为title
的值。如果参数不是已注册的查询变量,则按原样传递。 -
page_callback
(必需)- 用于动态生成页面内容的回调函数。回调函数应输出或返回页面内容(如果两者都提供,则返回值将附加到输出值)。如果返回FALSE
,则不输出任何内容,并将页面内容的控制权交回WordPress。回调函数将在WordPress页面加载的parse_request
阶段被调用。如果access_callback
返回FALSE
,则不会调用page_callback
。page_callback
可以是一个单一的回调函数,也可以是一个数组,指定特定 HTTP 方法(例如GET
、POST
、PUT
、DELETE
等)的回调函数。如果是后者,如果没有其他键与当前请求方法匹配,将使用default
键。 -
page_arguments
- 一个查询变量的数组,其值将作为参数传递给page_callback
。如果参数不是已注册的查询变量,则将按原样传递。 -
access_callback
- 一个回调,用于确定用户是否有权访问此页面。如果提供了access_arguments
,则默认为current_user_can
,否则默认为TRUE
。如果回调返回FALSE
,则匿名用户将被重定向到登录页面,已认证用户将收到 403 错误。access_callback
可以是一个单一的回调函数,也可以是一个数组,指定特定 HTTP 方法(例如GET
、POST
、PUT
、DELETE
等)的回调函数。如果是后者,如果没有其他键与当前请求方法匹配,将使用default
键。 -
access_arguments
- 一个查询变量的数组,其值将作为参数传递给access_callback
。如果参数不是已注册的查询变量,则将按原样传递。 -
template
- 可以用于显示页面的模板数组。如果路径是绝对路径,则将按原样使用;相对路径允许主题进行覆盖。字符串$id
将被替换为路由的 ID。如果没有找到模板,将按以下顺序使用后备模板:route-$id.php
、route.php
、page-$id.php
、page.php
、index.php
。如果给出 FALSE 而不是数组,则在调用exit()
之前将打印页面内容(您也可以通过直接从回调函数中打印输出并退出来实现这一点)。
-
示例
$router->add_route('wp-router-sample', array( 'path' => '^wp_router/(.*?)$', 'query_vars' => array( 'sample_argument' => 1, ), 'page_callback' => array(get_class(), 'sample_callback'), 'page_arguments' => array('sample_argument'), 'access_callback' => TRUE, 'title' => 'WP Router Sample Page', 'template' => array('sample-page.php', dirname(__FILE__).DIRECTORY_SEPARATOR.'sample-page.php') ));
在这个示例中,路径 http://example.com/wp_router/my_sample_path/
将调用调用类中的 sample_callback
函数。在这种情况下,sample_argument
查询变量的值 "my_sample_path" 将作为第一个也是唯一的参数传递给回调函数。如果主题中找到了 sample-page.php
文件,则将其用作模板;否则,将使用插件目录中的 sample-page.php
(如果也找不到,则回退到 route-wp-router-sample.php
等)。
编辑路由
您可以通过钩入 wp_router_alter_routes
动作来修改其他插件创建的路由。回调应接受一个参数,即一个 WP_Router
对象。
公共 API 函数
创建或更改路由始终应在 wp_router_generate_routes
或 wp_router_alter_routes
动作的情况下进行,使用传递给您的回调函数的 WP_Router
对象。
WP_Router::edit_route( string $id, array $changes )
- 更新$changes
中给出的每个属性,以匹配给定 ID 的路由。未在$changes
中给出的任何属性都将保持不变。WP_Router::remove_route( string $id )
- 删除具有给定 ID 的路由WP_Router::get_route( string $id )
- 获取给定 ID 的WP_Route
对象WP_Router::get_url( string $id, array $arguments )
- 获取访问具有给定 ID 的路由的 URL,带有给定的查询变量及其值WP_Route::get( string $property )
- 获取WP_Route
实例的指定属性的值