登录 WordPress 后重定向

Posted

技术标签:

【中文标题】登录 WordPress 后重定向【英文标题】:Redirect after Login on WordPress 【发布时间】:2011-12-28 23:20:18 【问题描述】:

我正在基于现有网站创建自定义 WordPress 主题。

我想使用我创建的备用仪表板。

如何在登录后将用户定向到“news.php”而不是“/wp-admin/”?

--

编辑:为此有一个工作插件,但任何可以通过functions.php找到手动方法的人仍然可以获得赏金,因为它比使用第3方插件更安全-in.

【问题讨论】:

news.php 在哪里 - 在前端还是在管理区域内(即仪表板,即 /wp-admin/... 的子级)?你能提供一个完整的路径吗? example.com/... 然后呢? 【参考方案1】:

这应该可以解决您的问题。改编自找到的答案here.

在你的主题的functions.php文件中添加以下sn-p代码:

function admin_default_page() 
  return '/new-dashboard-url';


add_filter('login_redirect', 'admin_default_page');

【讨论】:

很遗憾,我的 functions.php 文件不包含与该网站上发布的人相似的任何内容。 这对我有用! functions.php 文件不必包含这样的内容,只需将此代码添加到文件中即可! 这是有效的,因此您可以在插件中使用它或使用自定义函数插件,然后将这些代码行粘贴到那里。 (在自定义功能插件设置页面)【参考方案2】:

接受的答案是非常错误的。永远不应该修改 WordPress 核心。不仅在给定更新时所做的编辑会丢失,而且您一时兴起进行的某些更改可能会危及其他功能,甚至危及您网站的安全。

Action Hooks & Filters 包含在核心中,允许在不修改代码的情况下修改功能。

使用login_redirect 过滤器重定向某些用户的示例可以在here 中找到,它是解决您的问题非常更强大的解决方案。

对于您的具体问题,您希望这样做:

function login_redirect( $redirect_to, $request, $user )
    return home_url('news.php');

add_filter( 'login_redirect', 'login_redirect', 10, 3 );

【讨论】:

接受的答案中遗漏的关键内容,您的答案是应该编辑哪个文件。它是当前活动主题的 functions.php 文件。对吗? @ted.strauss 这是放置这个逻辑的最简单的地方,是的。它也可以去很多地方,但它们通常会涉及创建一个插件。 +1 @ted.strauss 我也不清楚,对于其他一些人来说,是的,它可以将代码放在functions.php的底部。另请注意,您可以直接链接到永久链接; return home_url('/news/');【参考方案3】:

这可能会有所帮助。 Peter's Login Redirect

登录和注销后将用户重定向到不同的位置。

为特定用户、具有特定角色的用户、具有特定能力的用户定义一组重定向规则,并为所有其他用户定义一揽子规则。此外,为注册后设置重定向 URL。这一切都在“设置”>“登录/注销重定向”中进行管理。

您可以在 URL 中使用语法 [variable]username[/variable],以便系统在每次登录时构建一个动态 URL,用用户的用户名替换该文本。除了用户名,还有“userslug”、“homeurl”、“siteurl”、“postid-23”、“http_referer”,还可以添加自己的自定义URL“变量”...

【讨论】:

我会在 7 天结束时,以防有人可以回答对 functions.php 的可能更改,因为与 3rd 方插件相比,这将是更可取的。【参考方案4】:

您还可以将自定义链接用作:

https://example.com/wp-login.php?redirect_to=https://example.com/news.php

【讨论】:

这对我来说是最好的答案,简单而有效。 这就是我要找的。谢谢【参考方案5】:
add_action('wp_head','redirect_admin');
function redirect_admin()
  if(is_admin())
    wp_redirect(WP_HOME.'/news.php');
    die; // You have to die here
  

或者如果您只想重定向其他用户:

add_action('wp_head','redirect_admin');
function redirect_admin()
  if(is_admin()&&!current_user_can('level_10'))
    wp_redirect(WP_HOME.'/news.php');
    die; // You have to die here
  

【讨论】:

如果我只想重定向订阅者,这是否正确? add_action('wp_head','redirect_admin');函数redirect_admin() if(current_user_can('level_0')) wp_redirect(WP_HOME.'/news.php');死; 【参考方案6】:

如果你有 php 5.3+,你可以像这样使用匿名函数:

add_filter( 'login_redirect', function()  return site_url('news');  );

【讨论】:

【参考方案7】:

Theme My Login 插件可能会有所帮助 - 它允许您将特定角色的用户重定向到特定页面。

【讨论】:

安装了这个插件,我再也无法退出我的帐户了。【参考方案8】:

接受的答案显然不是一个好的答案!它可能会在一段时间内解决您的问题,但是下次您更新 WordPress 安装时会发生什么? 您的核心文件可能会被覆盖,您将丢失所有修改。

正如其他人已经说过的(Dan 和 Travis 的回答),正确的答案是使用 login_redirect 过滤器。

【讨论】:

【参考方案9】:
// add the code to your theme function.php
//for logout redirection
add_action('wp_logout','auto_redirect_after_logout');
function auto_redirect_after_logout()
wp_redirect( home_url() );
exit();

//for login redirection
add_action('wp_login','auto_redirect_after_login');
function auto_redirect_after_login()
wp_redirect( home_url() );
exit();
`enter code here`

【讨论】:

【参考方案10】:

请试试这个,它适用于 WordPress 上的任何重定向

add_filter('woocommerce_login_redirect', 'wc_login_redirect'); 

function wc_login_redirect( $redirect_to ) 

   $redirect_to = 'PUT HERE URL OF THE PAGE';
   return $redirect_to;


【讨论】:

这项与 woocommerce 合作,我只是将其添加到答案中...... $redirect_to =get_site_url().'/pageslug';【参考方案11】:

对于 WooCommerce:登录/注销重定向 - 2021 年工作

add_filter('woocommerce_login_redirect', 'login_redirect');

function login_redirect($redirect_to) 

    return home_url();



add_action('wp_logout','logout_redirect');

function logout_redirect()

    wp_redirect( home_url() );
    
    exit;


【讨论】:

【参考方案12】:

这是一个基于用户角色重定向用户的代码sn-p:

add_filter( 'login_redirect', 'kp_login_redirect', 10, 3 );

function kp_login_redirect( $redirect_to, $request, $user ) 
    if ( isset( $user->roles ) && is_array( $user->roles ) ) 
        if ( in_array( 'subscriber', $user->roles )) 
             $redirect_to = home_url("dashboard");
        
    
    return $redirect_to;

如果您使用的是网络站点(多站点),请尝试以下操作:

add_filter( 'login_redirect', 'kp_login_redirect', 10, 3 );

function kp_login_redirect( $redirect_to, $request, $user ) 
    if ( isset( $user->roles ) && is_array( $user->roles ) ) 
        if ( in_array( 'subscriber', $user->roles )) 
             $redirect_to = network_site_url("dashboard");
        
    
    return $redirect_to;

【讨论】:

【参考方案13】:
// Used theme's functions.php  
add_action('login_form', 'redirect_after_login'); 
function redirect_after_login() 
     
global $redirect_to; 
if   (!isset($_GET['redirect_to'])) 
 
$redirect_to =   get_option('sample-page');
//  sample-page = your page name after site_url
 

【讨论】:

【参考方案14】:

根据其他一些答案,我想出了这个:

/**
 * Require login on all pages
 */
function so8127453_require_login() 
  if ( ! is_user_logged_in() ) 

    $protocol = $_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://';
    $base = $_SERVER['SERVER_NAME'];
    $uri = $_SERVER['REQUEST_URI'];

    $attempted_accessed_url = $protocol . $base . $uri;
    $login_url = 'https://' . $base . '/wp-login.php?redirect_to=' . $attempted_accessed_url;

    wp_redirect( $login_url );
  

add_action( 'template_redirect', 'so8127453_require_login' );

将所有流量重定向到登录页面。然后再到尝试访问的 URL。

【讨论】:

【参考方案15】:

我在搜索“如何修复 WordPress 登录页面刷新和重定向问题?”并没有找到任何好的解决方法。从这个 *** 问题中,我得到了帮助。我想与其他人分享,以便他们在需要时获得帮助。

在我的网站上,当我输入电子邮件和密码时,我一次又一次地重定向到 wp-admin 并要求输入密码。这段代码帮助我解决了这个问题:

function admin_default_page() 
  return '/';


add_filter('login_redirect', 'admin_default_page');

【讨论】:

【参考方案16】:

开箱即用,我发现它对我有用。如果您愿意,可以将参数替换为硬编码的站点

wp_loginout($_SERVER['REQUEST_URI']); 

【讨论】:

【参考方案17】:

要在成功登录后进行全局重定向,请在 wp-login.php 部分下找到此代码。

   <form name="loginform" id="loginform" action="<?php echo esc_url( site_url( 'wp-login.php', 'login_post' ) ); ?>" method="post">

<input type="hidden" name="redirect_to" value="<?php echo esc_attr($redirect_to); ?>" />

并将&lt;?php echo esc_attr($redirect_to); ?&gt; 替换为您要重定向的网址。 URL 必须以 http:// 开头并以 /other 结尾,否则页面将重定向到默认位置。

在同一文件中但在 &lt;form name="registerform"&gt; 部分下注册后执行相同的操作表单重定向。

【讨论】:

【参考方案18】:

functions.php 文件与登录重定向没有任何关系,您应该考虑的是 wp-login.php 文件,您实际上可以从那里更改整个登录界面,并强制用户重定向到您的自定义页面而不是 /wp-admin/ 目录。

如果使用 Windows 或任何文本编辑器,请使用记事本打开文件,按 Ctrl + F(在窗口上) 找到“wp-admin/”,改成登录后要重定向到的文件夹,还是在同一个文件上按Ctrl+F,找到“admin_url”,修改文件名,默认文件名是“ profile.php"...保存后试一试。

if ( !$user->has_cap('edit_posts') && ( empty( $redirect_to ) || $redirect_to == 'wp-admin/' || $redirect_to == admin_url() ) )
        $redirect_to = admin_url('profile.php');
    wp_safe_redirect($redirect_to);
    exit();

或者您可以使用“注册登录插件”http://wordpress.org/extend/plugins/registration-login/,只需简单地编辑重定向 url 和登录后您希望重定向到的链接,您就有了自己的自定义配置文件。

【讨论】:

有没有办法在不修改核心 WP 文件的情况下做到这一点?

以上是关于登录 WordPress 后重定向的主要内容,如果未能解决你的问题,请参考以下文章

angular 5 - 登录后重定向上一页

用户登录后重定向到要访问页面

如何将客人重定向到登录页面,在laravel 5.2登录后重定向回来[关闭]

登录后重定向到登录页面

CakePHP 登录后重定向到当前页面

使用 facebook 登录网站后重定向页面