Changing auth_redirect() page

时间:2020-03-11 作者:Zian Tap Chan

我知道auth_redirect() 检查用户是否已登录,如果未登录,则将其重定向到登录页面,然后在成功后返回上一页。我需要我的网站上的功能,我有。

例如,我希望其中一个页面只能由登录的用户访问,如果他们试图访问该页面,则需要先登录,然后成功返回该页面。我的电脑上有以下代码function.php.

if ( is_page(\'user_only\') && ! is_user_logged_in() ) {
    auth_redirect();
}
问题是我有一个自定义的登录/注册页面,而不是默认的WordPress登录页面,我想要auth_redirect(); 使用我的自定义登录/注册页面。

这个auth_redirect(); 正在使用wp-login.php 我想使用我的自定义页面account/index.php.这能做到吗?我知道wp_redirect( url, ); 但我不需要它,因为它的目的只是重定向,而不是身份验证。

2 个回复
最合适的回答,由SO网友:Zian Tap Chan 整理而成

编辑子主题功能,它位于:

C: \\xampp\\htdocs\\your website\\wp content\\themes\\your theme\\functions。php

然后在代码的底部,insert these 3 functions.

FUNCTION #1更改默认登录URL,即wp-login.php 到您的自定义页面。例如https://localhost/my-website/my-account/.

/**Function to change the default `wp-login.php` with your custom login page **/
add_filter( \'login_url\', \'new_login_page\', 10, 3 );
function new_login_page( $login_url, $redirect, $force_reauth ) {
    $login_page = home_url( \'/my-account/\' ); //use the slug of your custom login page.
    return add_query_arg( \'redirect_to\', $redirect, $login_page );
}
FUNCTION #2就我而言,我想redirect 用户进入Sign in/Registration 如果他们想访问wishlist 或者想进入checkout 页面,成功登录后,他们将重定向回上一页。

/**Function to redirect into `logged-in/Registration` page if not logged-in**/
add_action(\'template_redirect\', \'redirect_if_not_logged_in\');
function redirect_if_not_logged_in() {
    if (!is_user_logged_in() && (is_page(\'wishlist\') || is_page(\'checkout\'))) {
        auth_redirect(); //redirect into my custom login page
    }
}
FUNCTION #3最后一件事是在成功登录后将重定向处理回上一页。

出于某种原因,如果您使用的是默认登录页面wp-login.php 而且不是自定义登录页面,成功登录后重定向可以在不使用以下代码的情况下工作,我仍然在搜索有关它的解释,因为我刚刚接触WoodPress,我认为这与Woocommerce的自定义登录页面有关。否则,您可以在成功登录后使用以下代码重定向回上一页。

//function to create the redirection url
function redirect_link($redirect){
    //extract the redirection url, in my case the url with rederiction is https://my-website/my-account/?redirect_to=https://my-website/the-slug/ then I need to get the
    //https://my-website/the-slug by using the `strstr` and `substr` function of php.
    $redirect = substr(strstr($redirect, \'=\'), 1); 

    //decode the url back to normal using the urldecode() function, otherwise the url_to_postid() won\'t work and will give you a different post id.
    $redirect = urldecode($redirect);

    //get the id of page that we weanted to redirect to using url_to_postid() function of wordpress.
    $redirect_page_id = url_to_postid( $redirect );

    //get the post using the id of the page
    $post = get_post($redirect_page_id); 

    //convert the id back into its original slug
    $slug = $post->post_name;

    if(!isset($slug) || trim($slug) === \'\'){ //if slug is empty or if doesn\'t exist redirect back to shop
        return get_permalink(get_page_by_path(\'shop\'));
    }

    //re-create the url using get_permalink() and get_page_by_path() function.
    return get_permalink(get_page_by_path($slug));
}

/**Function to redirect back to previous page after succesfful logged-in**/
add_filter( \'woocommerce_login_redirect\', \'redirect_back_after_logged_in\');
function redirect_back_after_logged_in($redirect) {
    return redirect_link($redirect);
}

/**Function to redirect back to previous page after succesfful registration**/
add_filter( \'woocommerce_registration_redirect\', \'cs_redirect_after_registration\');
function cs_redirect_after_registration( $redirect ){
    return redirect_link($redirect);
}
我不确定这在安全性和bug问题上是否是正确的方法,我希望有人会指出正确的方法,如果有,如果我找到更好的方法,我会编辑这个。

SO网友:sleepingpanda

请尝试此代码。

  function redirect_user() {
    if ( is_user_logged_in() && ! is_page( \'login\' ) ) {
     $return_url = esc_url( home_url( \'/your-custom-login-page/\' ) );
      wp_redirect( $return_url );
      exit;
    }
  }
 add_action( \'template_redirect\', \'redirect_user\' );

相关推荐

Redirecting from wp-content?

出于某种原因,谷歌从wp内容中提取了我们的一篇文章的PDF版本,并将其作为我们价值较高的关键词之一进行排名。我希望将PDF链接重定向到原始文章的链接,但我似乎无法让重定向插件为wp内容URL工作。如果你对我如何从wp内容PDF url重定向到原始文章url有任何想法,我将不胜感激。谢谢