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

Ещё более простой способ, чем показал @Brady — использование функции current_user_can
:
if ( current_user_can( 'subscriber' ) )
echo "Привет, дорогой подписчик! Рады видеть тебя снова!";
Мультисайт (MU)
Для мультисайтовых установок существует аналог — current_user_can_for_blog
:
global $blog_id;
if ( current_user_can_for_blog( $blog_id, 'subscriber' ) )
echo "Привет, дорогой подписчик! Рады видеть тебя снова в этом блоге!";
Под капотом
Если посмотреть исходный код функций для обычных или мультисайтовых установок, то видно, что обе по сути полагаются на wp_get_current_user()
, а затем проверяют наличие has_cap
.
Если же вы хотите узнать, откуда берётся сама возможность (capability), то здесь в игру вступает класс/объект 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()
позволяет проверять возможности относительно объекта записи. Этот объект доступен только для записей, уже находящихся в базе данных. В основном используется для разрешения/запрещения доступа к определённым функциям записи.

Я считаю, что это нужно обновить, потому что:
Не передавайте название роли в current_user_can(), так как это не гарантирует корректной работы (см. #22624).
со страницы current_user_can()
в кодексе, насколько мне известно, ничего не изменилось.

@ialocin Вы можете обновить это, если хотите (это уже 2+ года). В принципе, вы правы. С другой стороны, роль также добавляется как capability ;)

Вы имеете в виду это?
global $userdata;
get_currentuserinfo();
if ( $userdata->user_level != 0 ) // проверяем уровень пользователя по ID уровня
{
echo 'Пользователь не является подписчиком';
}
else
{
echo 'Пользователь является подписчиком';
}
Подробнее об ID для разных уровней: http://codex.wordpress.org/Roles_and_Capabilities#User_Levels
Также существует функция current_user_can(), которая позволяет проверять конкретные возможности для большей гибкости. http://codex.wordpress.org/Function_Reference/current_user_can

Не используйте уровни пользователей... Вот что говорит кодекс по этому поводу: Для поддержания обратной совместимости с плагинами, которые всё ещё используют систему уровней пользователей (хотя это крайне не рекомендуется), стандартные Роли в WordPress также включают Возможности, соответствующие этим уровням. Уровни пользователей были окончательно устаревшими в версии 3.0.
