Получить список зарегистрированных мета-боксов и их удаление

9

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

http://codex.wordpress.org/Function_Reference/remove_meta_box

http://codex.wordpress.org/Function_Reference/add_meta_box

Майкл Эклунд
источник
1
Откатите ваши изменения и задайте новый вопрос, а не просто добавьте к уже существующему. Получение параметров экрана сильно отличается от получения мета-блоков.
EAMann

Ответы:

9

Не совсем, но вы можете определить свой собственный. Все мета-блоки хранятся в глобальной переменной, $wp_meta_boxesкоторая является многомерным массивом.

function get_meta_boxes( $screen = null, $context = 'advanced' ) {
    global $wp_meta_boxes;

    if ( empty( $screen ) )
        $screen = get_current_screen();
    elseif ( is_string( $screen ) )
        $screen = convert_to_screen( $screen );

    $page = $screen->id;

    return $wp_meta_boxes[$page][$context];          
}

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


Допустим, вы хотите получить массив, содержащий все мета-блоки, которые имеют «нормальный» приоритет на панели администратора. Вы бы назвали следующее:

$dashboard_boxes = get_meta_boxes( 'dashboard', 'normal' );

Это идентично глобальному массиву, $wp_meta_boxes['dashboard']['normal']а также многомерному массиву.

Удаление основных мета-блоков

Допустим, вы хотите удалить кучу мета-блоков. Приведенную выше функцию можно слегка настроить, чтобы:

function remove_meta_boxes( $screen = null, $context = 'advanced', $priority = 'default', $id ) {
    global $wp_meta_boxes;

    if ( empty( $screen ) )
        $screen = get_current_screen();
    elseif ( is_string( $screen ) )
        $screen = convert_to_screen( $screen );

    $page = $screen->id;

    unset( $wp_meta_boxes[$page][$context][$priority][$id] );
}

Если вы хотите удалить, скажем, виджет входящих ссылок из Dashboard, вам нужно позвонить:

remove_meta_boxes( 'dashboard', 'normal', 'core', 'dashboard_incoming_links' );
EAMann
источник
привет, я знаю, что вы давно ответили, но не могли бы вы взглянуть на мой вопрос об этой же проблеме? Это globalне работает для меня! Спасибо. wordpress.stackexchange.com/questions/318834/…
посредница
1

На панели управления WordPress отображаются мета-блоки. Есть нормальный столбец и боковой столбец.

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

// Remove some non-sense meta boxes
function remove_dashboard_meta_boxes(){
    global $wp_meta_boxes;
    // Dashboard core widgets :: Left Column
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']);
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_comments']);
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']);
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']);
    // Additional dashboard core widgets :: Right Column
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_recent_drafts']);
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press']);
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);
    // Remove the welcome panel
    update_user_meta(get_current_user_id(), 'show_welcome_panel', false);
}
add_action('wp_dashboard_setup', 'remove_dashboard_meta_boxes');

Просто используйте, print_r($wp_meta_boxes);чтобы увидеть список зарегистрированных мета-блоков.

Майкл Эклунд
источник
1
Этот код не предоставляет список доступных мета-блоков.
fuxia
@toscho Это делает , если выprint_r($wp_meta_boxes);
Майкл Экланд