Как удалить некоторые параметры экрана и мета-боксы из добавления / редактирования типа сообщения?

10

Теперь, когда вы добавляете или редактируете конкретный пост в желаемом типе поста, появляются и другие параметры экрана. Хотя эти параметры экрана показывают / скрывают мета-блоки. Я хотел бы иметь возможность программно получить список всех этих зарегистрированных параметров экрана мета-блоков, чтобы я мог снова проверить, существует ли определенный массив параметров экрана, и если они есть, я планирую удалить их программно.

WordPress - Параметры экрана - Добавить или изменить сообщение - Мета-боксы Нажмите здесь для полноразмерного скриншота

Вопрос: Как программно получить список всех зарегистрированных параметров экрана (мета-блоков) по типам сообщений, где вы хотите добавить или отредактировать конкретное сообщение в желаемом типе сообщения.

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

Майкл Эклунд
источник

Ответы:

13

Что вам нужно, так это глобальное $wp_meta_boxesиндексирование get_current_screen()->id. Удаление параметров экрана также удалит метабоксы, которые вы можете сделать непосредственно перед отображением параметров экрана с помощью 'in_admin_header'ловушки.

Итак, давайте предположим, что вы хотите избавиться от опции экрана «Отправить трекбэки», которую вы видите на этом скриншоте:

Перетащите следующий класс в functions.phpфайл вашей темы или в плагин, который вы, возможно, создаете, и код удалит параметр экрана «Отправить трекбэки» (и связанный с ним метабокс, что также является тем, что вы хотели, верно?):

class Michael_Ecklunds_Admin_Customizer {
  function __construct() {
    add_action( 'in_admin_header', array( $this, 'in_admin_header' ) );
  }
  function in_admin_header() {
    global $wp_meta_boxes;
    unset( $wp_meta_boxes[get_current_screen()->id]['normal']['core']['trackbacksdiv'] );
  }
}
new Michael_Ecklunds_Admin_Customizer();

И вот как это выглядит после добавления приведенного выше кода на сайт WordPress 3.4:

Использование отладчика Zend внутри PhpStorm здесь осмотр , $wp_meta_boxes[get_current_screen()->id]так что вы можете увидеть , что значения установки по умолчанию WordPress 3.4 имеет на экране редактирования сообщения (я кружил индексы массива я ссылку в моем примере, то есть $wp_meta_boxes[get_current_screen()->id]['normal']['core']['trackbacksdiv']:

Надеюсь, это то, что вы искали?

MikeSchinkel
источник
3
Просто удивительно! Поздравляю, Эклунд, ты получил не только канонический ответ, но и легендарный ..!
brasofilo
@brasofilo Спасибо за комплимент. Я горжусь.
MikeSchinkel
@MikeSchinkel Это работает при добавлении / редактировании поста, и спасибо вам за это, но как убрать мета-поля опций экрана для страницы, на которой есть wp_list_table, содержащая список всех ваших постов? Смотрите на скриншот № 1.
Майкл Эклунд
@MichaelEcklund Привет, наверное, мне не следует отвечать на вопросы, когда я слишком устал, чтобы полностью понять вопрос, а? Ответ на вопрос без ответа на самом деле значительно отличается от того, на который я ответил, так что это действительно два разных вопроса. Как вы относитесь к редактированию этого вопроса, чтобы спросить, на что я ответил, а затем добавить еще один вопрос, чтобы спросить, что я не сделал? Если вы можете сделать это и опубликовать ссылку на нее здесь, в комментариях, я найду ответ на аналогичные детали и для этого вопроса. В противном случае может быть сложно написать один связный ответ для обоих.
MikeSchinkel
1
@MichaelEcklund Круто, спасибо. Ответил: wordpress.stackexchange.com/a/56896/89
MikeSchinkel
0

Извините, это немного побочный эффект, но я обнаружил, что это полезно, когда дело доходит до удаления мета-блоков wp из коробки, но не так много для мета-блоков, связанных с пользовательской или пользовательской темой. Чтобы проиллюстрировать это немного подробнее: я установил новую тему, в которой каждый раз при создании нового поста / страницы появлялось настраиваемое метабокс, который отображался в настройках экрана. (Я новичок в wp, так что) По какой-то причине, используя подход Майка, я не смог удалить этот пользовательский мета-блок, но он работал для всего нестандартного. Из-за своей глупости я продолжал врезаться в стену часами, все еще не мог понять, поэтому я должен был вернуться к этому:

if (is_admin()) :
function my_remove_meta_boxes() 
{
  if(!current_user_can('administrator')) 
  {
    remove_meta_box('theme_custom_meta_box', 'post', 'side');
  }
}
add_action( 'add_meta_boxes', 'my_remove_meta_boxes' );
endif;
Yinnie
источник