http://wm-monitoring.ru/ ')) {alert('Спасибо за то что установили нашу кнопку! =)');} else {alert('Очень жаль! =(');}"> http://wm-monitoring.ru/

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

Опубликовано: 24.08.2018

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

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

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

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 ) ; ?>

<?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' ) ; ?>

<?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. Для онлайн-заработка есть ну очень много вариантов, в статье про заработок на платных опросах рассказывается об одном из них — возможно не столь прибыльном, но интересном.

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

Остановившись в Киеве на пару дней не ищите номер в отеле, услуга посуточная аренда квартир в киеве намного дешевле и представлена большим выбором апартаментов.

Карта
rss