КС: Контент, видный только администратору.

КС = "Как сделать так, чтобы..."

Наверное, все, кто заходит на мой блог, видят под названием небольшую надпись. Некоторые, возможно, даже замечают, что эта надпись постоянно меняется. Достигается этот эффект при помощи небольшого плагина Tagline Rotator, но о нем я расскажу как-нибудь в другой раз. Так вот, понадобилось мне добавить ссылку на страницу с добавлением нового теглайна. Понятное дело, что эта ссылка должна быть видна только мне, тобеж администратору блога.
Недолго думая, я добавил в код header.php рядом с теглайном нечто следующего вида:

<?php
if (is_admin())
{ echo "&nbsp;<a href="адрэс">(+)</a>"; }
?>


Знатоки вордпресса сразу поймут, почему эта хрень не прокатила. Всё просто: тэг (conditional tag) is_admin используется для показа контента в админ-панели, а не администратору. Пришлось идти другим путем.
Для начала я вспомнил, что все пользователи блога делятся по ролям, которых всего 11 (от нулевого до 1-го). Точнее, так было во времена вордпресса версий 1.5 и 2.0. С тех пор много воды утекло, но я об этом забыл, поэтому следующей моей попыткой было вот это:

<?php global $current_user; get_currentuserinfo();
if ($current_user->user_level == 10 )
{ echo "&nbsp;<a href="адрэс">(+)</a>" ; }
?>

Так вот, как я и сказал, с тех пор много воды утекло и в вордпрессе третьей версии такое уже не работает:

Note: User Levels were introduced in WordPress 1.5, they were replaced by Roles and Capabilities in WordPress 2.0, and were finaly deprecated in WordPress 3.0.

WordPress Codex

Пришлось шерстить кодекс дальше, и мои старания-таки увенчались успехом! В третьей версии для определения роли пользователя используется функция current_user_can единственным параметром которой является возможность (capability) или роль (role name). Короче говоря, код приобрел следующий, рабочий, вид:

<?php
if (current_user_can( 'administrator' ))
{ echo "&nbsp;<a href="адрэс">(+)</a>"; }
?>

Функция удобна тем, что позволяет разграничивать видимость контента не только по ролям (которых 5), но и по возможностям (которым вообще несть числа). Полный список ролей и возможностей опять же можно найти в кодексе.

Комментариев к “КС: Контент, видный только администратору.”: 5

  1. А таким образом можно скрыть только текст? Или есть возможность скрыть содержимое целого сайдбара? Чтобы можно было редактировать его из админки, добавлять виджеты, которые могут быть видны ограниченному кругу пользователей? Или хотя бы один виджет можно скрыть. Или все прийдется прописывать вручную?

    1. В принципе, ничто не мешает разделить сайдбар на два или больше, и к выводу одного из них добавить условие if (current_user_can( 'роль или возможность' ))При этом управлять каждым сайдбаром в админке можно будет по отдельности, но внешне это будет выглядеть как один единый сайдбар (для тех, кто сможет видеть его полностью).

      Впрочем, вполне возможно, что для скрытия каких-нибудь виджетов от гостей или обычных пользователей существуют специальные плагины =)

    2. Но лично я всеми виджетами управляю непосредственно в коде файлов темы, и админкой в этом смысле вообще не пользуюсь — мне это попросту неудобно.

Добавить комментарий для Apathetic Отменить ответ