Obtenga una lista de meta cajas registradas y elimínelas


9

¿Existe una función para obtener una lista de Meta Boxes registradas y eliminarlas? Veo que hay un método para agregar y eliminar.

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

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


1
Revierta sus cambios y haga una nueva pregunta en lugar de simplemente agregarla a una existente. Obtener opciones de pantalla es muy diferente a obtener meta cuadros.
EAMann

Respuestas:


9

En realidad no, pero puedes definir el tuyo. Todos los meta cuadros se almacenan en la variable global $wp_meta_boxesque es una 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];          
}

Esta matriz mostrará todos los meta cuadros registrados para una pantalla específica y un contexto específico. También podría profundizar aún más porque esta matriz también es una matriz multidimensional que segrega meta cuadros por prioridad e id.


Entonces, supongamos que desea obtener una matriz que contenga todos los meta cuadros que son de prioridad "normal" en el Panel de administración. Llamarías a lo siguiente:

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

Esto es idéntico al conjunto global$wp_meta_boxes['dashboard']['normal'] y también es un conjunto multidimensional.

Eliminar meta cuadros principales

Digamos que quieres eliminar un montón de meta cuadros. La función anterior se puede ajustar ligeramente para aprovechar que:

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

Si quisiera eliminar, digamos, el widget de enlaces entrantes del Panel, llamaría:

remove_meta_boxes( 'dashboard', 'normal', 'core', 'dashboard_incoming_links' );

Hola, sé que es mucho tiempo que respondiste, pero ¿podrías echar un vistazo a mi pregunta sobre este mismo problema? ¡El globalno funciona para mí! Gracias. wordpress.stackexchange.com/questions/318834/…
middlelady

1

En el Panel de WordPress, se muestran cuadros de meta. Hay una columna normal y una columna lateral.

Puedo obtener una lista de meta cuadros registrados y eliminarlos del tablero usando el siguiente 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');

Solo use print_r($wp_meta_boxes);para ver una lista de meta cuadros registrados.


1
Este código no proporciona una lista de meta cuadros disponibles.
fuxia

@toscho Lo hace si túprint_r($wp_meta_boxes);
Michael Ecklund
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.