Obter lista de meta caixas registradas e removê-las

9

Existe uma função para obter uma lista de Meta Boxes registradas e removê-las? Vejo que existe um método para adicionar e remover.

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

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

Michael Ecklund
fonte
1
Reverta suas alterações e faça uma nova pergunta em vez de apenas adicionar a uma existente. Obter opções de tela é muito diferente de obter meta boxes.
EAMann

Respostas:

9

Na verdade não, mas você pode definir o seu próprio. Todas as meta boxes são armazenadas na variável global, $wp_meta_boxesque é uma matriz multidimensional.

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];          
}

Essa matriz mostrará todas as meta boxes registradas para uma tela específica e um contexto específico. Você também pode fazer uma pesquisa detalhada ainda mais, porque essa matriz também é uma matriz multidimensional que separa as meta boxes por prioridade e ID.


Então, digamos que você deseja obter uma matriz que contenha todas as meta boxes com prioridade "normal" no painel do administrador. Você chamaria o seguinte:

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

Isso é idêntico ao array global$wp_meta_boxes['dashboard']['normal'] e também um array multidimensional.

Remoção de meta boxes principais

Digamos que você deseja remover um monte de meta boxes. A função acima pode ser levemente aprimorada para aproveitar isso:

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] );
}

Se você deseja remover, digamos, o widget de links recebidos do Painel, ligue para:

remove_meta_boxes( 'dashboard', 'normal', 'core', 'dashboard_incoming_links' );
EAMann
fonte
ei, sei que já faz muito tempo que você respondeu, mas poderia dar uma olhada na minha pergunta sobre esse mesmo problema? O globalnão está funcionando para mim! Obrigado. wordpress.stackexchange.com/questions/318834/...
middlelady
1

No Painel do WordPress, são exibidas meta caixas. Há uma coluna normal e uma coluna lateral.

Consigo obter uma lista de meta boxes registradas e removê-las do painel usando o seguinte código:

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

Basta usar print_r($wp_meta_boxes);para ver uma lista de meta boxes registradas.

Michael Ecklund
fonte
1
Este código não fornece uma lista de meta boxes disponíveis.
fuxia
@toscho Ele faz se vocêprint_r($wp_meta_boxes);
Michael Ecklund