Ottieni l'elenco delle meta box registrate e rimuovendole


9

Esiste una funzione per ottenere un elenco di Meta Box registrate e rimuoverle? Vedo che esiste un metodo per aggiungere e rimuovere.

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

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


1
Ripristina le modifiche e fai una nuova domanda anziché aggiungerne una esistente. Ottenere le opzioni dello schermo è molto diverso rispetto all'ottenere meta box.
EAMann,

Risposte:


9

Non proprio, ma puoi definire il tuo. Tutte le meta box sono memorizzate nella variabile globale $wp_meta_boxesche è un array multidimensionale.

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

Questo array mostrerà tutte le meta box registrate per una schermata specifica e un contesto specifico. Puoi anche approfondire ulteriormente perché questo array è anche un array multidimensionale che separa le meta-box per priorità e ID.


Supponiamo quindi che tu voglia ottenere un array che contenga tutte le meta-box con priorità "normale" nella Dashboard di amministrazione. Chiameresti quanto segue:

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

Questo è identico all'array globale$wp_meta_boxes['dashboard']['normal'] ed è anche un array multidimensionale.

Rimozione delle meta box principali

Supponiamo che tu voglia rimuovere un mucchio di meta box. La funzione sopra può essere leggermente modificata per avvalersi che:

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 si desidera rimuovere, ad esempio, il widget dei collegamenti in entrata dalla Dashboard, si chiamerebbe:

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

ehi, so che è molto che rispondi, ma potresti dare un'occhiata alla mia domanda su questo stesso identico problema? Il globalnon funziona per me! Grazie. wordpress.stackexchange.com/questions/318834/…
middlelady

1

Sul pannello di WordPress, ci sono meta box visualizzati. C'è una colonna normale e una colonna laterale.

Sono in grado di ottenere un elenco di meta box registrate e rimuoverle dalla dashboard utilizzando il seguente codice:

// 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 usare print_r($wp_meta_boxes);per vedere un elenco di meta box registrate.


1
Questo codice non fornisce un elenco di meta box disponibili.
fuxia

@toscho Lo fa se tuprint_r($wp_meta_boxes);
Michael Ecklund il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.