如果您不熟悉WordPress生态系统,可能会发现很难掌握WordPress的灵活性。 当然,您确实可以使用成千上万个主题和插件,并且您可能认为WordPress可以很好地扩展,但是如果您不了解WordPress提供的“动作”和“过滤器”,您可以您会惊讶于此惊人的内容管理系统可以做的事情更多 。
在本教程中,我将指导您使用WordPress过滤器来更改页面以重定向到其他操作。
让我们开始吧!
通过操作和过滤器利用WordPress的灵活性
通过我在简介中大胆的讲道,您可能会认为我有点夸张。 我向你保证,我没有。 毫无疑问,钩子是WordPress灵活性的真正原因 。 没有钩子系统,主题将变得更加僵化,更重要的是,大多数WordPress插件甚至都不存在 。 这将导致开发人员开发更少的插件和主题,而WordPress的世界将变得更小,从而使其成为另一个枯燥的内容管理系统。
挂钩是按照它们的名字命名的: 挂钩东西。 挂钩有两种,动作挂钩和过滤挂钩。 动作挂钩在特定动作之前或之后触发功能,而过滤挂钩在输出数据之前先处理数据。 (在本教程中,我们将重点放在过滤器挂钩上。)这就是为什么大多数插件都依赖挂钩来控制WordPress的原因,主题为其他插件创建了自己的挂钩,以允许其他插件扩展主题。
我找不到何时在WordPress中引入钩子的可靠来源,但是在WordPress.org的1.2版公告中 ,集成了一个新的插件体系结构,并说“插件现在可以插入WordPress几乎执行的所有操作” 。 如果那是WordPress钩子引入的开始,那意味着钩子诞生于2004年Spring,即WordPress的第一个版本发布一年之后。
如果您想了解有关WordPress中的动作和过滤器的更多信息,我为每种类型的钩子提供了一个系列:“ WordPress的50个过滤器 ”和“ WordPress的50个动作 ”。 如果您有兴趣,请务必将它们签出!
在不同情况下管理WordPress重定向
如所承诺的,我现在将进入WordPress过滤器。 在本教程中,我们有七个要学习的WordPress过滤器:一个用于注册,两个用于登录和注销,一个用于密码重设,一个用于注释,以及两个用于最近改版的“按此”功能。
注意:您可以在主题的functions.php
文件中使用本教程中的一些代码来快速使用它们,但是出于功能目的而编辑主题文件被认为是不好的做法。 ( 请查看我有关“插件领域”的教程。 )相反,您应该为此目的组成一个特定于站点的插件。 ( 查看Rachel的有关创建插件的视频教程。 )
成功注册后重定向用户
通常,新用户会被重定向到登录表单,并收到以下通知:“注册完成。请检查您的电子邮件。” 借助registration_redirect
过滤器,我们将对其进行更改。
假设您有一份关于您的专业领域的特殊白皮书,并将其提供给网站上的新用户。 使用下面的代码片段,您可以将新用户发送到一个页面,该页面带有白皮书的下载链接:
<?php
add_filter( 'registration_redirect', 'redir_new_users' );
function redir_new_users() {
// change the slug below with your own page's slug
return home_url( '/white-paper/' );
}
?>
用您自己页面的标签编辑标签“白皮书”,您就可以开始了!
登录和注销时重定向用户
每次登录后,用户将被发送到仪表板。 如果您的用户由于某种原因不需要(或不应该)看到仪表板,则可以使用login_redirect
过滤器将其保留在前端。
在下面的示例中,我们将检查用户角色并将“订阅者”重定向到主页:
<?php
add_filter( 'login_redirect', 'send_subscribers_home', 10, 3 );
function send_subscribers_home( $location, $request, $user ) {
global $user;
if ( isset( $user->roles ) && is_array( $user->roles ) ) {
if ( in_array( 'subscriber', $user->roles ) ) {
return home_url();
} else {
return $redirect_to;
}
}
return;
}
?>
使用logout_redirect
过滤器可以完成相同的操作。 您可以将其重定向到“再见”页面,在此页面中他们可以确认已注销,而不是将其发送到主页:
<?php
add_filter( 'logout_redirect', 'goodbye_subscribers', 10, 3 );
function goodbye_subscribers( $location, $request, $user ) {
global $user;
if ( isset( $user->roles ) && is_array( $user->roles ) ) {
if ( in_array( 'subscriber', $user->roles ) ) {
// change the slug below with your own page's slug
return home_url( '/goodbye/' );
} else {
return $redirect_to;
}
}
return;
}
?>
密码重置后重定向用户
默认情况下,在“重置密码”表单中输入用户名或电子邮件地址的用户将被发送回登录表单,并带有一条通知,以检查其电子邮件以重置密码。 lostpassword_redirect
过滤器允许我们更改该页面。
对于大多数WordPress网站而言,“检查您的电子邮件以确认链接”通知就足够了,但是如果您需要共享有关重置密码过程的更多信息(例如“检查您的SPAM文件夹”或“如果您没有此电话,请致电此号码”)没有收到任何电子邮件”),您可以将用户重定向到特定页面:
<?php
add_filter( 'lostpassword_redirect', 'lostpassword_message' );
function lostpassword_message( $location ) {
// change the slug below with your own page's slug
return '/lost-password-notice/';
}
?>
注释时重定向用户
comment_post_redirect
过滤comment_post_redirect
您可以在发送评论后更改评论者转到的页面。
这可能是本教程中的最佳技巧,因为它可以增加您的新闻通讯订阅者。 例如,您可以使用以下代码行将其发送到“感谢评论,并且不要忘记订阅我们的新闻”页面:
<?php
add_filter( 'comment_post_redirect', 'redirect_to_newsletter' );
function redirect_to_newsletter( $location ) {
// change the slug below with your own page's slug
return '/subscribe-to-our-newsletter/';
}
?>
使用“按此”键重定向用户
“按此”是用于快速发布或保存帖子的简单工具,但有一些限制。 例如,使用网站的“按此按钮”书签后,它使您可以返回到在弹出窗口中共享的页面,而该页面已在浏览器中打开。 很奇怪,我知道。
值得庆幸的是,我们可以在press_this_redirect_in_parent
和press_this_save_redirect
过滤器的帮助下进行press_this_redirect_in_parent
。 使用以下代码将使“按此”工具关闭弹出窗口(第一个过滤器),并返回到您自己网站的主页(第二个过滤器):
<?php
// use the built-in __return_true() WordPress function to simply return a "true" boolean statement
add_filter( 'press_this_redirect_in_parent', '__return_true' );
// return the home URL to redirect the author to the homepage
add_filter( 'press_this_save_redirect', function( $url, $id, $status ) {
return home_url();
}, 10, 3 );
?>
微提示:您是否注意到我使用了匿名功能 ? 没错:如果您的服务器运行的是PHP v5.3.0或更高版本,则可以传递匿名PHP函数 。
包装一切
“挂钩”系统是WordPress的最强大功能之一,它已帮助社区制作了我们今天利用的大量出色的插件和主题。 如果没有“动作挂钩”和“过滤挂钩”,则可能无法达到此级别的可扩展性。 我认为可以肯定地说,没有这些挂钩,WordPress不会在每四个网站中使用一个 。 谁想到了这些“挂钩”的想法,谢谢!
您如何看待本教程中的过滤器? 您能为他们想到更好的用例吗? 还是您认为我错过了本文中可能提到的一个钩子? 在下面的评论部分中与我们分享您的想法,经验和想法。 如果您喜欢阅读本文,请不要忘记与您的朋友和同事分享!
对于与本文无关的任何其他内容,您可以通过Twitter上的@BarisUnver_EN (英语)和@BarisUnver (土耳其语)与我联系。
谢谢阅读!
翻译自: https://code.tutsplus.com/tutorials/managing-redirections-in-wordpress-with-filters--cms-25664