Я хотел бы иметь возможность скрывать мета-блоки, используя параметры экрана, вместо того, чтобы удалять их или ограничивать их ролями пользователей, цель состоит в том, чтобы просто «снять» мета-поле для пользователя.
Я вижу, как это было бы сложно, поскольку любой код, который вносил бы изменения в БД для пользователя, не мог запускаться каждый раз, когда он попадает на страницу, потому что он просто сбрасывается. Но люди умнее, чем я кодирую ядро, так что, возможно, есть способ. И если есть, я хочу знать.
Есть идеи?
Ответы:
Вы имеете в виду метабоксы на экране администратора?
Для этого вам не нужен плагин, просто добавьте следующее в ваш файл functions.php.
В основном происходит то, что для текущего вошедшего в систему пользователя вы изменяете некоторые сохраненные meta_values в таблице wp_usermeta.
Есть два способа использования этой функции: вы можете подключиться к 'user_register' или к 'admin_init'.
Преимущество использования 'user_register' состоит в том, что эта функция будет срабатывать только при регистрации нового пользователя (таким образом, уменьшаются накладные расходы). Однако это не будет работать для пользователей, которые уже существуют.
Если вы хотите, чтобы это работало для пользователей, которые уже существуют, подключитесь к admin_init. Недостатком, конечно, является то, что теперь эта функция срабатывает каждый раз, когда пользователь заходит на страницу администратора.
источник
functions.php
файл моей темы, потому что параметры по умолчанию предназначены для конкретного проекта, который представлен / размещен темой, которую я разрабатываю.В нем есть
default_hidden_meta_boxes
фильтр,get_hidden_meta_boxes()
который позволяет изменять, которые не отображаются, если пользователь не изменил свои настройки в настройках экрана.источник
У меня есть комментарии к трем уже опубликованным решениям, но также и общий комментарий
Они представляют собой неоптимальный выбор: либо отменить выбор опции «Параметры экрана» пользователя; или уважайте его, но игнорируйте ваш код, если пользователь когда-либо изменял флажки, даже для других meta_boxes, или до того, как ваш код был в WP. Кажется, уважительный выбор полезен, только если все ваши пользователи являются новыми. Лучшим решением было бы установить пользовательскую опцию пользователя, чтобы определить, были ли ваши конкретные значения по умолчанию для meta_box изменены пользователем, и уважать это. Нет, я не написал этот код! Должно быть легко ... :)
Опубликованы три решения:
1. Решение WraithKenny
hidden_meta_boxes
переопределяет user_option. Обратите внимание, что он охватывает все типы сообщений («публикация», «страница», «ссылка», «вложение» и любые пользовательские типы сообщений). Это хорошо, если вы не хотите, чтобы это было конкретным. Вы указали post_type в своихadd_meta_box()
звонках. Вы можете попытаться сопоставить их или просто использовать, поскольку те, которые не соответствуют, будут игнорироваться. Если вы хотите узнать post_type в фильтре, вы можете использовать дополнительныйscreen
параметр:2. Как говорит Rarst,
default_hidden_meta_boxes
уважает user_option. Как и в случаеhidden_meta_boxes
, вы можете использовать параметр $ screen, чтобы различать post_types.3. Функция Drebabels set_user_metaboxes () также учитывает user_option. Обратите внимание, что он жестко запрограммирован для экрана редактирования «post». Чтобы обработать экран редактирования 'page' и другие post_types, оберните код в этот цикл:
Да,
get_user_meta
должно бытьget_user_option
. Для одного сайта это не имеет значения, и даже для нескольких сайтов это, вероятно, не имеет значения. См. Wp-admin / includes / ajax-actions.php, почему:update_user_option
имеет глобальный параметр 'true'.источник
Существует также
hidden_meta_boxes
фильтр, который «снимает» метабокс (делая его скрытым) при каждой загрузке страницы (но не должен обновлять базу данных вообще). Если вы просто хотите отключить его для новых пользователей, пока они сами не установят флажок, воспользуйтесь ответом Rarst.источник