Янв
25
3

Скрываем custom fields для не админов, функция remove_meta_box()

custom fieldsЕсли у вас в блоге, есть несколько пользователей, то вы, наверное, сталкивались с разграничением прав, например, когда нужно удалить меню в WordPress админке для читателей и авторов, оставив тот или иной раздел администратору. Сегодня рассмотрю один похожий случай, что приключился в процессе работы над молодежным интернет журналом где у посетителей есть возможность регистрироваться, сочинять и публиковать свои заметки. Часть функционала в блоге реализовано с помощью так называемых произвольных полей custom fields и суть в том, что пользователи проекта в отличии от администратора не должны иметь возможность их редактировать. То есть доступ к custom fields должен быть только у админа.

Тут следует также заметить, что есть разные роли пользователей в Вордпресс и у каждой из них свои ограниченные + соответствующие возможности. В текущем проекте настроено все так, что Участником становится посетитель после регистрации и может отправлять в блоге свои публикации. Посты не отображаются на сайте сразу, а предоставляются на утверждение администратору, который уже решает быть новой записи или нет. Причем, что важно, как только админ утвердил и опубликовал заметку, Участник не сможет больше внести в нее изменения. У Автора в этом плане опции несколько иные — для постинга ему не требуется подтверждение админа, посты сразу появляются на сайте. Следовательно он целиком и полностью может управлять своими заметками когда захочет.

Не знаю на 100% то ли там на сайте используется какой-то модуль для подобного разграничения прав, то ли так устроено все всех версиях wordpress, но это, по сути, не важно. Вывод из данного лирического отступления заключается том, что если у вас в блоге имеются только Участники без Авторов, тогда, в принципе, можно ничего не придумывать особо — даже, если пользователь добавить какую-то информацию в custom fields (для начинающих и не знакомых с wordpress вероятность этого почти стремится к нулю), то в любом случае админ в процесс проверки статьи может ненужные ему элементы удалить. Причем, как отмечалось выше, пользователь Участник после публикации на это никак не сможет повлиять. Но как быть с Авторами… Здесь нам на помочь приходит очень полезная функция remove_meta_box() и условный оператор.

Функция remove_meta_box

Основное и единственное назначение этой функции заключается в том, что она удаляет (скрывает) тот или иной мета блок данных при создании постов, страниц и ссылок. В нашем случае нужно скрыть блок с custom fields только для пользователей не администраторов, поэтому применим небольшое условие. Весь код нужно поместить в файл functions.php:

if (is_admin()) {
function my_remove_meta_boxes() {
 if(!current_user_can('administrator')) {
  remove_meta_box('postcustom','post','normal');
  remove_meta_box('postcustom','page','normal');
 }
}
add_action( 'admin_menu', 'my_remove_meta_boxes' );
}

Сохраняем и проверяем. Вообще изначально думал, что нужно указать в качестве первого параметра функции remove_meta_box название исключаемого custom fields, но как оказалось позже она убирает сразу целый мета блок. Собственно, поэтому функция может использоваться и для других блоков на странице.

Вообще любой пользователь может скрыть ненужные или отобразить мета блоки с помощью ссылки «Настройки экрана» в админке wordpress, которая располагается в верхнем правом углу страницы. При открытии найдете все возможные блоки, а также количество столбцов для их вывода (на маленьких экранах удобнее будет работать с одним).

Настройки экрана

Общий синтаксис функции remove_meta_box следующий:

<?php remove_meta_box( $id, $page, $context ); ?>

Здесь параметр $page задает на какой именно странице создания записи нужно убирать блог: ‘post’ -пост, ‘page’ — страница, ‘link’ — раздел со ссылками. Полезно, что функция также работает с созданными пользовательскими типами, например ‘product’. Переменная $context может принимать значения normal, advanced или side — тут, признаться без понятия что это значит. Больше всего вариантов у параметра $id — он задает какой именно мета блок убирается. В качестве ‘id’ могут использовать следующие обозначения:

  • ‘commentstatusdiv’ — статус комментариев (обсуждение) — разрешить / запретить.
  • ‘commentsdiv’ — мета блок всех комментариев к посту.
  • ‘slugdiv’ — выбор Slug значения для ссылки.
  • ‘revisionsdiv’ — блок ревизий.
  • ‘authordiv’ — мета блок автора.
  • ‘postcustom’ — произвольные поля Custom fields, который мы использовали выше.
  • ‘postexcerpt’ — поле для Excerpt.
  • ‘trackbacksdiv’ — блок с трекбэками (Trackbacks).
  • ‘postimagediv’ — миниатюра для поста (Featured image).
  • ‘formatdiv’ — мета блок Formats.
  • ‘tagsdiv-post_tag’ — Теги для поста.
  • ‘categorydiv’ — мета блок категорий.
  • ‘pageparentdiv’ — атрибуты для записи.

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

<?php 
function remove_page_fields() {
 remove_meta_box( 'commentstatusdiv' , 'page' , 'normal' ); //removes comments status
 remove_meta_box( 'commentsdiv' , 'page' , 'normal' ); //removes comments
 remove_meta_box( 'authordiv' , 'page' , 'normal' ); //removes author 
}
add_action( 'admin_menu' , 'remove_page_fields' );
?>

Как видите, нет ничего сложного в этом коде, добавить его нужно разумеется в functions.php. Не забудьте только кроме самой функции использовать еще и конструкцию add_action, как это показано в примере — тогда все обязательно получится.

P.S. Для онлайн-заработка есть ну очень много вариантов, в статье про заработок на платных опросах рассказывается об одном из них — возможно не столь прибыльном, но интересном.
Вы наверняка слышали о том, что каждое имя имеет определенный смысл, толкование имен поможет узнать о своих скрытых возможностях и придумать имя своему ребенку.
Остановившись в Киеве на пару дней не ищите номер в отеле, услуга посуточная аренда квартир в киеве намного дешевле и представлена большим выбором апартаментов.

комментария 3 к статье “Скрываем custom fields для не админов, функция remove_meta_box()”

  • Ольга   01.02.2012

    Спсибо. В так подробно и понятно пишете. Я не очень хорошо разбираюсь пока в html-кодах. Вы здорово помогли. Теперь буду почаще к Вам заглядывать.

  • Саша   03.09.2012

    Как настроить использование уже созданных полей для некоторых ролей ??
    К примеру, чтобы пользователь с ролью «Jorn» мог использовать но не мог создавать произвольные поля ???

  • Tod   04.09.2012

    Саша, не смогу подсказать, с разными ролями я не работал, нужно разбираться в этом вопросе.

Оставить комментарий


Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!

Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:

Последние посты
Заработай в GoGetLinks
Лучшее в категории
Облако тегов
Скажи свое мнение!

В чем основные плюсы Wordpress?

Посмотреть результаты

Загрузка ... Загрузка ...
Друзья проекта
Последние новости