WordPress钩子:template_redirect 模板重定向

追格官方小助手/ 2023年02月22日/ WordPress/ 浏览 2484

之前介绍过修改 WordPress 默认模板行为的方法《WordPress钩子:template_include 为WordPress模板树添加新节点》。WordPress中还有一个方法与之相类似,就是 template_redirect 。


template_redirect 在WordPress决定加载哪个模板页面之前执行。如果您需要在完全了解所查询内容的情况下进行重定向,那么可以使用它。


do_action( 'template_redirect' );


与 include_template 不同的是,template_redirect 是 Action,而 include_template 是 Fliter。Action 和 Fliter 的区别,可以参考文章《三分钟热度教程:WordPress插件开发之Action和Filter都叫钩子》《WordPress 中的 action 和 filter 有什么区别》


注意:


加载一个不同的模板并不能很好地使用这个动作挂钩。如果包含另一个模板,然后使用 exit 或 die,则不会运行后续的 template_redirect 挂钩,这可能会破坏站点的功能。相反,使用template_include筛选器钩子返回要使用的新模板的路径。这将允许在不干扰WordPress加载过程的情况下使用替代模板。


也就是说 template_redirect 要配合使用 wp_redirect ,而 template_include 应该与 include 配合。


如果,非要在 template_redirect 中 include,在 template_include 中 wp_redirect ,也许会有一些功能不正常……


使用举例:


function custom_redirects() {

	if ( is_front_page() ) {
		wp_redirect( home_url( '/dashboard/' ) );
		die;
	}

	if ( is_page('contact') ) {
		wp_redirect( home_url( '/new-contact/' ) );
		die;
	}

}
add_action( 'template_redirect', 'custom_redirects' );


发表评论

暂无评论,抢个沙发...

客服 工单