Làm cách nào để chuyển hướng người dùng không đăng nhập vào một trang cụ thể?


16

Cách chuyển hướng người dùng không đăng nhập yêu cầu một trang / URL cụ thể sang một trang / URL khác và hiển thị thông báo như "chỉ dành cho thành viên". Tôi biết cách viết mã khá dễ dàng bằng cách sử dụng hàm! Is_user_logged_in () nhưng tôi không biết cách viết mã bởi vì tôi là người mới sử dụng WordPress. Quan tâm cho tôi biết các tập tin để đặt mã cũng.

Câu trả lời:


30

Dưới đây là 2 ví dụ mà bạn sẽ cần sửa đổi một chút để làm cho nó hoạt động cho các nhu cầu cụ thể của bạn.

add_action( 'admin_init', 'redirect_non_logged_users_to_specific_page' );

function redirect_non_logged_users_to_specific_page() {

if ( !is_user_logged_in() && is_page('add page slug or ID here') && $_SERVER['PHP_SELF'] != '/wp-admin/admin-ajax.php' ) {

wp_redirect( 'http://www.example.dev/page/' ); 
    exit;
   }
}

Đặt cái này trong tệp chức năng chủ đề con của bạn, thay đổi ID trang hoặc sên và url chuyển hướng.

Bạn cũng có thể sử dụng mã như thế này:

add_action( 'template_redirect', 'redirect_to_specific_page' );

function redirect_to_specific_page() {

if ( is_page('slug') && ! is_user_logged_in() ) {

wp_redirect( 'http://www.example.dev/your-page/', 301 ); 
  exit;
    }
}

Bạn có thể thêm tin nhắn trực tiếp vào trang hoặc nếu bạn muốn hiển thị tin nhắn cho tất cả người dùng chưa đăng nhập, hãy thêm nó vào mã .

http://codex.wordpress.org/Function_Reference/wp_redirect


Cảm ơn bạn đã trả lời Tôi đã làm như thế này add_action('template_redirect', 'redirect_to_specific_page'); function redirect_to_specific_page() { if ( is_page('http://mydomain.com/participate') && !is_user_logged_in()) { wp_redirect('http://mydomain.com/login', 301); exit; } }Nhưng nó không hoạt động
user3187719

Sử dụng id trang hoặc sên ở đây, không phải url mydomain.com/partendsate codex.wordpress.org/Conditable_Tags
Brad Dalton

is_page ('tham gia')
Brad Dalton

7

Điều này sẽ tốt hơn:

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

// continue as normal for authenticated users

Điều này làm là chuyển hướng người dùng đến trang đăng nhập. Sau khi đăng nhập, người dùng được chuyển hướng trở lại trang bảo mật mà họ đang cố truy cập ban đầu.

Tài liệu ở đây:

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


4

Làm thế nào chúng tôi có thể cho bạn biết nơi để đặt nó nếu bạn không cho chúng tôi biết những gì và nơi bạn muốn hiển thị nó? Toàn bộ bài viết? Trang? Phần tùy chỉnh của các trang? Xin lỗi ... tôi đoán quả cầu pha lê của tôi không hoạt động nhiều hôm nay.

Vì bạn là như vậy, và tôi trích dẫn bạn: "một người mới học wordpress", bạn nên học, hơn là yêu cầu trả lời trực tiếp.

Đối với nơi bạn nên đọc liên kết 1 tham khảo. Điều này sẽ cho bạn biết tập tin nào bạn cần đặt nó vào.

Về cách thực hiện, trước tiên bạn nên đọc liên kết tham khảo 2 và 3.

Nhìn chung, nó sẽ trông giống như thế này:

if ( is_user_logged_in() ) {
    the_content();
} else {
    echo 'For members only';
}

Tất nhiên đoạn mã trên cần phải đi vào một vòng lặp . Bạn có thể xây dựng nó phức tạp hoặc đơn giản như bạn muốn. Ví dụ: thay vì văn bản đơn giản nếu không đăng nhập, bạn có thể hiển thị toàn bộ biểu mẫu đăng ký chẳng hạn hoặc - như tôi đề xuất - một màn hình chia nơi người dùng có thể đăng nhập (vì người dùng có thể có tài khoản nhưng quên đăng nhập) hoặc đăng ký (nếu anh ta không có).

  1. Phân cấp mẫu
  2. Thẻ có điều kiện
  3. Vòng lặp

Đã thêm sau khi nhận xét bên dưới:

Để chuyển hướng sử dụng headervới wp_login_url- một lần nữa, hãy kiểm tra các tham chiếu 1 và 2 bên dưới:

if ( is_user_logged_in() ) {
    the_content();
} else {
    header('Location: ' . wp_login_url());
}

Tài liệu tham khảo:

  1. Tiêu đề - PHP
  2. wp_login_url

Trên thực tế tôi không biết funtction trên wordpress trả về URL được yêu cầu hoặc permalink. Và về thông báo phân tán, hãy để lại nó, tôi muốn chỉ chuyển hướng chúng khi họ yêu cầu một số URL nhất định mà không được đăng nhập.
dùng3187719

Tôi có thể làm điều đó với $ pagenow không?
dùng3187719

@ user3187719 đã chỉnh sửa câu trả lời ban đầu của tôi và thêm giải pháp để chuyển hướng. Tái bút $pagenow? Bạn đang cố gắng giết một con ruồi bằng một khẩu pháo chắc chắn nó sẽ hoạt động, nhưng tại sao lại phức tạp như vậy? Giữ cho nó đơn giản. PS2: Tìm hiểu PHP và WP Codex.
Borek

4

Bạn không thể chuyển hướng đến một trang cụ thể, nhưng mọi người dùng không đăng nhập sẽ được chuyển hướng đến Màn hình đăng nhập.

<?php auth_redirect(); ?>

Tham khảo Wordpress: auth_redirect()

Chỉ cần đề cập đến một giải pháp khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.