alleyinteractive / wp-path-dispatch
简单方便地添加一个URL,该URL可以触发一个动作、调用回调函数和/或加载模板。
Requires
- php: ^8.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-08-31 00:44:01 UTC
README
简单方便地添加一个URL,该URL可以触发一个动作、调用回调函数和/或加载模板。
安装
您可以通过composer安装此包
composer require alleyinteractive/wp-path-dispatch
用法
在任何初始化之前的位置,
\WP_Path_Dispatch\Path_Dispatch()->add_path( [ 'path' => 'some-path', 'callback' => 'some_function' ] );
这将导致 http://domain.com/some-path/ 调用 some_function()
。
重要!在添加路径后,您必须刷新重写。
您可以使用 add_paths()
一次添加多个路径
\WP_Path_Dispatch\Path_Dispatch()->add_paths( [ [ 'path' => 'some-path', 'callback' => 'some_function', ], [ 'path' => 'custom-feed.json', 'callback' => 'custom_feed', ], [ 'path' => 'custom-feed.xml', 'callback' => 'custom_feed', ], ] );
分发发生在 parse_query
上,因此您可以随后通过 pre_get_posts
或执行您需要执行的任何操作来修改查询。您甚至可以只加载一个静态文件并退出,如果您只需要渲染静态内容。
当路径加载时,将触发动作 dispatch_path_{$path}
。您可以通过挂钩此操作来代替或与传递给 add_path(s) 的回调函数一起使用。回调函数是可选的。
最后,如果您路径更复杂,可以设置自定义重写。在这种情况下,'path' 参数实际上变成了一个别名。有关 'rule'、'redirect'(重写)和 'position' 的详细信息,请参阅 add_rewrite_rule()。
所有路径选项的完整分解
\WP_Path_Dispatch\Path_Dispatch()->add_path( [ 'path' => 'some-path', // required 'callback' => 'some_function', // optional 'action' => '', // fire this action instead of dispatch_path_{$path} 'template' => '', // optional 'rewrite' => [ // optional 'query_vars' => [], // optional 'rule' => '', // required (assuming 'rewrite' is set) 'redirect' => 'index.php?dispatch=$matches[1]', // optional 'position' => 'top' // optional ], ] );
示例
最简单的用法:在 http://domain.com/my-path/ 触发动作 'dispatch_path_my-path'
\WP_Path_Dispatch\Path_Dispatch()->add_path( [ 'path' => 'my-path', ] );
这甚至可以进一步简化为
\WP_Path_Dispatch\Path_Dispatch()->add_path( 'my-path' );
在 http://domain.com/my-path/ 调用函数 'my_function'
\WP_Path_Dispatch\Path_Dispatch()->add_path( [ 'path' => 'my-path', 'callback' => 'my_function', ] );
在 http://domain.com/my-path/ 加载模板文件 'dispatch-custom-page.php'
\WP_Path_Dispatch\Path_Dispatch()->add_path( [ 'path' => 'my-path', 'template' => 'custom-page' ] );
添加自定义重写规则。在例如 http://domain.com/my-path/foo/ 触发动作 'dispatch_path_my-path' 并将查询变量 'my_path' 设置为 'foo'。这假设您已经注册了该查询变量。
\WP_Path_Dispatch\Path_Dispatch()->add_path( [ 'path' => 'my-rewrite', 'rewrite' => [ 'rule' => 'my-path/(.*)/?', 'redirect' => 'index.php?dispatch=my-rewrite&my_path=$matches[1]' ], ] );
与上述相同,但自动注册查询变量,并加载模板 'dispatch-my-page.php'。
\WP_Path_Dispatch\Path_Dispatch()->add_path( [ 'path' => 'my-rewrite', 'rewrite' => [ 'rule' => 'my-path/(.+)/?', 'redirect' => 'index.php?dispatch=my-rewrite&my_path=$matches[1]', 'query_vars' => 'my_path', ], 'template' => 'my-page', ] );
与上述相同,但使用多个查询变量,并用回调函数而不是模板。
\WP_Path_Dispatch\Path_Dispatch()->add_path( [ 'path' => 'my-rewrite', 'rewrite' => [ 'rule' => 'my-path/([^/]+)/(.+)/?', 'redirect' => 'index.php?dispatch=my-rewrite&my_path=$matches[1]&my_section=$matches[2]', 'query_vars' => [ 'my_path', 'my_section' ], ], 'callback' => [ My_Singleton(), 'my_method' ], ] );
变更日志
请参阅 CHANGELOG 了解最近的变化。
鸣谢
此项目由 Alley Interactive 主动维护。喜欢你所看到的吗? 加入我们的团队。
许可
GNU通用公共许可证(GPL)。请参阅 许可文件 了解更多信息。