簡體   English   中英

重定向到 wordpress 中的登錄頁面

[英]Redirect to login page in wordpress

我是 wordpress 的新手。 我在http://localhost/wordpress/上運行 wordpress 設置。 我現在面臨兩個問題:

  • 只有已登錄的用戶才能訪問該站點。 因此,我正在嘗試使用以下代碼將用戶從主頁重定向到登錄頁面,但不知何故不起作用:

路徑: wp-content/themes/twentysixteen/header.php

        <?php
            if(get_permalink() != wp_login_url() && !is_user_logged_in()){
                wp_redirect( wp_login_url() ); exit;
            }
        ?>

由於上面的代碼不起作用,我嘗試通過讓用戶通過單擊login按鈕手動登錄來繼續前進。 這是工作代碼:

<?php
    if(get_permalink() != wp_login_url() && !is_user_logged_in()){
        // wp_redirect( wp_login_url() ); exit;
?>
        <a href="<?php echo wp_login_url( get_permalink() ); ?>" title="Login">Login</a>
<?php
    }
?>
  • 從上面的代碼中,當用戶點擊登錄時,他被重定向到登錄頁面,當用戶登錄時,頁面被重定向到 wordpress admin,即wp-admin而不是主頁,即http://localhost/wordpress

我想做的是:

  • 如果用戶未登錄,則將用戶從主頁重定向到登錄頁面。
  • 然后在用戶登錄時將用戶從登錄頁面重定向到主頁而不是 wp-admin。

要將用戶從主頁重定向到登錄頁面,您可以使用 Wordpress 函數 is_user_logged_in,

https://developer.wordpress.org/reference/functions/is_user_logged_in/

if(!is_user_logged_in()) {
    wp_redirect( wp_login_url() );
}

要在主頁而不是儀表板上重定向用戶,您可以遵循堆棧溢出上已發布的解決方案。

https://wordpress.org/support/topic/how-can-i-redirect-users-to-the-front-page-after-log-in

提供個性化或私人內容的WordPress網站通常希望將其用戶保持在網站的前端。 但是,WordPress登錄后會自動將用戶帶到后端儀表板。 顯然,我們需要能夠將這些用戶重定向到站點的前端。 但與此同時,任何管理員用戶仍可能希望最終停留在網站的后端。 WordPress使我們能夠使用login_redirect過濾器來編輯用戶登錄后發送到的位置。

下面的代碼段將使您輕松檢測用戶的角色並將其重定向到適當的位置

<?php 
/**
 * WordPress function for redirecting users on login based on user role
 */
function my_login_redirect( $url, $request, $user ){
    if( $user && is_object( $user ) && is_a( $user, 'WP_User' ) ) {
        if( $user->has_cap( 'administrator' ) ) {
            $url = admin_url();
        } else {
            $url = home_url('/members-only/');
        }
    }
    return $url;
}
add_filter('login_redirect', 'my_login_redirect', 10, 3 );

請注意,上面代碼中的has_cap()方法將檢查用戶是否具有特定角色或能力。 此外,如果您希望傳遞特定的頁面或帖子ID,home_url()函數將采用一條相對路徑或相對路徑,也可以將其替換為get_permalink()。

另一種可能性是基於自定義用戶元數據在登錄時重定向WordPress用戶:

<?php
/**
 * WordPress function for redirecting users based on custom user meta
 */
function my_login_redirect( $url, $request, $user ){
    if( $user && is_object( $user ) && is_a( $user, 'WP_User' ) ) {
        if( 'cool' == get_user_meta( $user->ID, '_is_cool', true ) ) {
            $url = home_url('/cool-people-only/');
        }
    }
    return $url;
}
add_filter('login_redirect', 'my_login_redirect', 10, 3 );

上面代碼的一種可能的用途是本地化。 例如,假設您的一家餐廳有五個地點。 當用戶登錄到您的網站時,他們可以將午餐訂單放置在自己喜歡的位置。 如果您只是將他們喜歡的位置存儲為自定義用戶元,那么您可以在他們登錄時檢查該數據並將其自動發送到正確的訂單頁面。

以下是您需要的一組代碼:

  • 您需要將用戶從 wp-admin 重定向到主頁,但請確保不要重定向 Ajax 請求。
  • 禁用特定用戶角色的管理欄

——

//Redirect user to the home page when they try to access admin panel while allowing Ajax requests.
function block_admin_access_for_subs()
{
    // Restrict backend access for subscribers
    if( is_admin() && !defined('DOING_AJAX') && (current_user_can('subscriber')) ){
        wp_redirect(home_url());
        exit;
    }
}
add_action('init', 'block_admin_access_for_subs');

//Disable admin bar for specific user roles
add_action('after_setup_theme', 'remove_admin_bar_for_subs');
function remove_admin_bar_for_subs() {
    if (current_user_can('subscriber') && !is_admin()) {
        show_admin_bar(false);
    }
}

在您希望將用戶重定向到登錄頁面的模板中添加以下代碼。

if ( !is_user_logged_in() ) {
       auth_redirect();
}

來源: https : //codex.wordpress.org/Function_Reference/auth_redirect

嘗試通過傳遞一個 url 來做這樣的事情

<?php
        if(get_permalink() != wp_login_url() && !is_user_logged_in()){
            wp_redirect( wp_login_url($redirect) ); exit;
        }
    ?>

並且您的重定向.. 必須是絕對的..

$redirect = site_url().'/login';

或任何您選擇的網址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM