登录后重定向至引用页面

时间:2014-11-27 作者:Praveen Kumar Purushothaman

我没有使用任何自定义登录插件或任何定制代码。我的一些页面在一开始就有这段代码。

<?php
    if(!is_user_logged_in())
        wp_redirect(\'/login/\');
?>
因此,这不允许用户在未登录时查看页面。我的这些页面上有这样一段代码:

/wp-content/my-theme/my-account/
/wp-content/my-theme/my-account/world.php
/wp-content/my-theme/my-account/subscription.php
/wp-content/my-theme/my-dashboard.php
/wp-content/my-theme/my-files.php
现在,当用户转到上述任何一个页面而不登录时,它会重定向到登录页面,当用户登录时,它会将其登录到my-account/

我想更改当前场景,使用户重定向到引用页面,即他来自的页面。我尝试了以下方法,但都没有成功。

使用HTTP_REFERRER

login/ 表单中,我放置了以下代码:

<input type="hidden" name="redirect" value="<?php echo $_SERVER[\'HTTP_REFERER\']; ?>" />
黑客攻击functions.phpfunctions.php, 我放置了以下代码:

if ( (isset($_GET[\'action\']) && $_GET[\'action\'] != \'logout\') || (isset($_POST[\'login_location\']) && !empty($_POST[\'login_location\'])) ) {
        add_filter(\'login_redirect\', \'my_login_redirect\', 10, 3);
        function my_login_redirect() {
                $location = $_SERVER[\'HTTP_REFERER\'];
                wp_safe_redirect($location);
                exit();
        }
}

References:

4 个回复
最合适的回答,由SO网友:birgire 整理而成

我不确定我是否理解您的设置,但这里有一些想法:

A) 显示登录链接redirect_to 参数集:

您可以将以下内容添加到自定义模板页面:

if( ! is_user_logged_in() )
{
    printf( \'<a href="%s">%s</a>\', 
        wp_login_url( get_permalink() ),
        __( \'You need to login to view this page!\' )
    );
}
这将为匿名访问者生成一个登录链接,当前页面位于redirect_to 获取参数。

B) 重定向到wp-login.php 使用redirect_to 参数集:

请注意wp_redirect() 必须在发送HTTP标头之前发生。

我们可以在template_redirect 挂钩:

add_action( \'template_redirect\', 
    function()
    {
        if( ! is_user_logged_in() 
            && is_page( array( \'member-page-1\', \'member-page-2\' ) ) 
        )
        {
            wp_safe_redirect( wp_login_url( get_permalink() ) ); 
            exit();
        }
    }
);
我们限制访问带有slug的页面member-page-1member-page-2.

C) 本机登录表单(直列):

另一种选择是将本机登录表单直接包含到页面内容中:

add_filter( \'the_content\', function( $content ) {

    if( ! is_user_logged_in() 
        && is_page( array( \'member-page-1\', \'member-page-2\' ) ) 
    )
        $content = wp_login_form( array( \'echo\' => 0 ) );

    return $content;
}, PHP_INT_MAX );
我们限制访问带有slug的页面member-page-1member-page-2.

请注意,您必须处理归档/索引/搜索页面

更新:我使用wp_login_url() 作用

SO网友:cybmeta

乌斯金get_permalink(), 正如公认的答案中所建议的那样,只有在您处于帖子(任何类型)中时才有效,但如果您处于类别存档中,则无效。要使其在任何地方工作,都需要当前URL,而不管我们看到的是什么类型的内容。

要在WordPress中获取当前URL,我们可以从全局$wp 对象并使用将其附加到网站urladd_query_arg(). 我们可以在redirect_to 的参数wp_login_url() 功能:

wp_login_url( site_url( add_query_arg( array(), $wp->request ) ) );
相同的方法可用于wp_logout_url() 如果需要:

wp_logout_url( site_url( add_query_arg( array(), $wp->request ) ) );

SO网友:KKumar

您还可以在自定义登录页中使用此代码

if ( ! is_user_logged_in() ) { // Display WordPress login form:
   $args = array(
    \'redirect\' => esc_url($_SERVER[\'HTTP_REFERER\']), 
    \'form_id\' => \'loginform-custom\',
    \'label_username\' => __( \'Email\' ),
    \'label_password\' => __( \'Password\' ),
    \'label_log_in\' => __( \'Log In\' ),
    \'remember\' => false
);
wp_login_form($args);
echo \'<p><a href="\' . wp_lostpassword_url($redirect) .\'">Lost Password</a></p>\';
}
这将在登录后将用户重定向到referrer页面。

SO网友:Pratap

我知道已经很晚了,但我正在发布解决方案,以便它能够帮助目前需要帮助的人。

这就是我正在做的,它工作得很好。

function redirect_user_tologin(){
  global $post;
  $post_slug = $post->post_name;

  if(!is_user_logged_in()){
      if($post_slug == \'my-account\') { //can add multiple conditions

          //create dynamic redirect page link
          $redirect = urlencode(site_url().\'/\'.$post_slug);

          //redirection
          wp_safe_redirect(site_url().\'/wp-login.php/?redirect_to=\' .$redirect);
          exit;
       }
   }
}
add_action(\'wp\', \'redirect_to_login\');
解释如果用户未登录wp_safe_redirect 将用户带到登录页面。

为了在登录后重定向用户,我们将在中以值形式传递页面链接redirect_to 参数,以便将用户带到该特定页面。

登录页面url:site_url().\'/wp-login.php/

重定向页面链接:redirect_to=\' .$redirect

结束

相关推荐

如何根据对应于meta_value(这是用户ID)的USER_LOGIN对帖子进行排序?

我正在尝试为CPT列表创建可排序的列标题,但我只限于一个部分。单击“Assignee”列标题时,我希望列表按用户登录名的字母顺序显示。中的以下内容pre_get_posts 按用户ID排序(通过高级自定义字段保存为meta\\u值):$query->set(\'meta_key\', \'assignee\' ); $query->set(\'orderby\', \'meta_value\' ); 但是,我想订购的不是ID,而是它对应的user\\u登录名。我已经成功地使用