Скрываем custom fields для не админов, функция remove_meta_box()
Если у вас в блоге, есть несколько пользователей, то вы, наверное, сталкивались с разграничением прав, например, когда нужно удалить меню в 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. Для онлайн-заработка есть ну очень много вариантов, в статье про заработок на платных опросах рассказывается об одном из них — возможно не столь прибыльном, но интересном.
Вы наверняка слышали о том, что каждое имя имеет определенный смысл, толкование имен поможет узнать о своих скрытых возможностях и придумать имя своему ребенку.
Остановившись в Киеве на пару дней не ищите номер в отеле, услуга посуточная аренда квартир в киеве намного дешевле и представлена большим выбором апартаментов.
комментариев 8 к статье “Скрываем custom fields для не админов, функция remove_meta_box()”
Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!
Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:
- Як сховати відсутні товари в Woocommerce шорткодах та схожих товарах
- Сервіс AdMaven + плагін для монетизації трафіка на WordPress сайтах
- Плагіни для створення стрічки новин з біжучим рядком в WordPress
- Як змінити розміщення кнопки оформлення замовлення в WooCommerce
- Плагін WHWS Display In Stock Products First – відображення товарів в наявності першими
- Підписка MonsterONE: чи варто використовувати цей сервіс у 2023 році? (+5 продуктів, які треба скачати в першу чергу)
- Онлайн генератор ссылок на мессенджеры для WordPress и не только
- WooCommerce (46)
- Безопасность (12)
- Видео (6)
- Виджеты (28)
- Возможности (141)
- Вопрос-ответ (6)
- Начинающим (52)
- Новости (46)
- Оптимизация (23)
- Плагины (246)
- Сервисы (87)
- Хаки и секреты (87)
- Шаблоны (45)
- Записи и посты wordpress, оформление записи (5,91 из 7, голосов - 47)
- Проблема с адаптивными изображениями в Gutenberg редакторе WordPress (3,87 из 7, голосов - 45)
- Умный копирайт в footer.php для wordpress (5,63 из 7, голосов - 30)
- Обновление плагинов и тем в WordPress: автоматическое, через FTP, скрытие уведомлений (5,19 из 7, голосов - 31)
- Polylang — плагин для мультиязычных сайтов на нескольких языках в WordPress (4,42 из 7, голосов - 31)
- Плагин TinyMCE Advanced – wordpress текстовый редактор (6,35 из 7, голосов - 20)
- Рубрики и категории wordpress, функция wp_list_categories (6,05 из 7, голосов - 20)
- Дизайн Мания - о веб-дизайне и не только.
- Tod's Blog - все про заработок онлайн.
- Вебдванольные заметки - обзоры веб-сервисов.
- Советы по выбору холодильника LG с технологией No Frost
- Зачем нужны Wi-Fi ретрансляторы и как выбрать подходящую модель
- Введение в онлайн-казино Slotor777: многообразие игр и привлекательные бонусы
- Необходимость использования облачного хранилища в наше время, что важно и как выгодно?
- Спрощення процесу звітності за допомогою програми BAS Бухгалтерія
- Технологія підключення інтернету GPON та її переваги
- За що гравці найбільше цінують Lineage 2
- Для каких проектов нужна аренда виртуального сервера и что такое VPS
Спсибо. В так подробно и понятно пишете. Я не очень хорошо разбираюсь пока в html-кодах. Вы здорово помогли. Теперь буду почаще к Вам заглядывать.
Как настроить использование уже созданных полей для некоторых ролей ??
К примеру, чтобы пользователь с ролью «Jorn» мог использовать но не мог создавать произвольные поля ???
Саша, не смогу подсказать, с разными ролями я не работал, нужно разбираться в этом вопросе.
Скажите пожалуйста, этот метод подойдет если я вывожу произвольные кастомные поля в записях и хочу сделать скрытыми от пользователей некоторые поля, но для админа они должны быть видны
Стас, по идее, как раз должно подойти, но я давно это пробовал, сейчас не помню уже. Если вдруг не получится, попробуйте плагины для ролей пользователей.
Здравствуйте. А как например удалить не весь метабокс, а например некоторые рубрики из метабокса выбора рубрик (при создании записи)? Конечно только для пользователя Автор. А у админа чтобы были видны все. И ещё надо в меню слева оставить только ссылку «записи» а рубрики убрать, чтобы их пользователь с правами автор трогать не мог.
Евгений, можно глянуть пост про роли пользователей, где есть парочка плагинов по теме — с их помощью легко включать/отключать определенные возможности у юзеров админки. Не уверен, что есть блоки редактора, но все же советую посмотреть. Второй вариант — найти условный оператор, позволяющий идентифицировать «Автора» и заменить IF условие с current_user_can(‘administrator’) на другое.
Благодарю, второй вариант думаю подойдёт