Узнайте, вошел ли пользователь в систему не подписчик

8

Есть ли условный тег, который позволит мне отображать определенный контент, только если пользователь НЕ является подписчиком?

Насир Зия
источник

Ответы:

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

Еще более простой способ, чем показывал @Brady, это использование current_user_can:

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

MU

Есть также эквивалент для установок MU, названный 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!";

За занавесом

Если вы посмотрите на источник функций для одиночной установки или установки MU , то увидите, что оба они в основном полагаются, wp_get_current_user()а затем выполняют проверку has_cap. Теперь, если вы хотите увидеть, откуда взято ограничение, тогда WP_Userкласс / объект входит в игру.

Другие участники этого набора

Тогда есть также author_can( $GLOBALS['post'], 'capability' );. Все эти функции находятся ~/wp-includes/capabilitiesпрямо под друг другом.

Когда использовать что?

Теперь, где разница между current_user_can(_FOR_BLOG)и user_can?

  • user_can()является более новым (с 3.1), но нуждается в пользователе как объект. Таким образом, вы можете использовать его в тех случаях, когда вы не хотите ориентироваться на текущего пользователя, а на некоторых пользователей.
  • current_user_can_*() очевидно.
  • author_can()позволяет вам проверять возможности почтового объекта. Этот объект доступен только для сообщений, которые уже находятся в БД. Так что это в основном для разрешения / запрета доступа к определенным функциям сообщений.
кайзер
источник
1
Мне кажется, это нужно обновить, потому что: не передавайте имя роли в current_user_can (), так как это не гарантирует правильной работы (см. # 22624 ). со current_user_can()страницы кодекса AFAIK не изменился.
Николай
@ialocin Вы можете обновить это, если хотите (это 2 года + старый). Вы в основном правы. С другой стороны, роль добавляется в качестве способности;)
kaiser
1
Я думаю, этого должно быть достаточно для замечания / обновления, кроме того, что я ленивый ... тоже;)
Николай
-3

Это то, что вы имеете в виду?

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';
}

Подробнее об идентификаторах для разных уровней: http://codex.wordpress.org/Roles_and_Capabilities#User_Levels

Существует также функция current_user_can (), которая позволяет вам обозначать определенные возможности для большей гибкости. http://codex.wordpress.org/Function_Reference/current_user_can

Garn
источник
3
Не используйте пользовательские уровни ... Вот что говорит об этом Кодекс: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.
Скотт,