alleyinteractive/wp-path-dispatch

简单方便地添加一个URL,该URL可以触发一个动作、调用回调函数和/或加载模板。

v1.0.1 2024-05-01 17:04 UTC

This package is auto-updated.

Last update: 2024-08-31 00:44:01 UTC


README

Coding Standards Testing Suite

简单方便地添加一个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)。请参阅 许可文件 了解更多信息。