使用过滤器管理WordPress中的重定向

如果您不熟悉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_parentpress_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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值