Tìm hiểu xem người dùng đã đăng nhập không phải là thuê bao


8

Có thẻ điều kiện nào cho phép tôi hiển thị nội dung nhất định chỉ khi người dùng KHÔNG phải là thuê bao?

Câu trả lời:


9
<?php
global $current_user; // Use global
get_currentuserinfo(); // Make sure global is set, if not set it.
if ( ! user_can( $current_user, "subscriber" ) ) // Check user object has not got subscriber role
    echo 'User is a not Subscriber';
else
    echo 'User is a Subscriber';
?>

15

Một cách thậm chí còn đơn giản hơn so với @Brady cho bạn thấy là sử dụng current_user_can:

if ( current_user_can( 'subscriber' ) )
    echo "Hi, dear subscriber! Glad seeing you again!";

MU

Ngoài ra còn có một tương đương cho cài đặt MU, được đặt tên current_user_can_for_blog:

global $blog_id;
if ( current_user_can_for_blog( $blog_id 'subscriber' ) )
    echo "Hi, dear subscriber! Glad seeing you again on this blog!";

Ở hậu trường

Khi xem nguồn gốc của các chức năng cho các cài đặt đơn hoặc MU , thì bạn sẽ thấy, cả hai về cơ bản đều dựa vào wp_get_current_user()và sau đó kiểm tra has_cap. Bây giờ nếu bạn muốn xem, nắp xuất phát từ đâu, thì WP_Userlớp / đối tượng sẽ vào trò chơi.

Các thành viên khác của bộ này

Rồi cũng có author_can( $GLOBALS['post'], 'capability' );. Tất cả các chức năng là bên trong ~/wp-includes/capabilitiesngay bên dưới nhau.

Khi nào nên dùng gì?

Bây giờ, sự khác biệt giữa current_user_can(_FOR_BLOG)user_can đâu?

  • user_can()là cái mới hơn (kể từ 3.1), nhưng cần người dùng làm đối tượng. Vì vậy, bạn có thể sử dụng nó trong các trường hợp mà bạn không muốn nhắm mục tiêu người dùng hiện tại, nhưng một số người dùng.
  • current_user_can_*() là rõ ràng.
  • author_can()cho phép bạn kiểm tra khả năng chống lại một đối tượng bài. Đối tượng này chỉ có sẵn cho các bài đăng, đã có trong DB. Vì vậy, chủ yếu là cho phép / từ chối quyền truy cập vào các tính năng bài cụ thể.

1
Điều này tôi cảm thấy cần phải được cập nhật, bởi vì: Không chuyển tên vai trò cho current_user_can (), vì điều này không được đảm bảo để hoạt động chính xác (xem # 22624 ). từ current_user_can()trang codex AFAIK đã không thay đổi.
Nicolai

@ialocin Bạn có thể cập nhật nếu bạn muốn (đó là 2 năm + cũ). Bạn cơ bản là đúng. Mặt khác, một vai trò cũng được thêm vào như khả năng;)
kaiser

1
Tôi đoán điều này thực sự là đủ cho một nhận xét / cập nhật, bên cạnh đó tôi cũng lười biếng ...)
Nicolai

-3

Ý bạn là vậy đúng không?

global $userdata;
get_currentuserinfo();
if ( $userdata->user_level != 0 )//check user level by level ID
{
  echo 'User is a not Subscriber';
}
else
{
  echo 'User is a Subscriber';
}

Thêm chi tiết về ID cho các cấp độ khác nhau: http://codex.wordpress.org/Roles_and_Capabilities#User_Levels

Ngoài ra còn có hàm current_user_can (), cho phép bạn biểu thị các khả năng cụ thể để linh hoạt hơn. http://codex.wordpress.org/Function_Reference/cien_user_can


3
Đừng sử dụng cấp độ người dùng ... Đây là những gì codex nói về nó:To maintain backwards compatibility with plugins that still use the user levels system (although this is very much discouraged), the default Roles in WordPress also include Capabilities that correspond to these levels. User Levels were finally deprecated in version 3.0.
Scott
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.