Liste der registrierten Meta-Boxen abrufen und entfernen

9

Gibt es eine Funktion zum Abrufen und Entfernen einer Liste registrierter Meta-Boxen? Ich sehe, dass es eine Methode zum Hinzufügen und Entfernen gibt.

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

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

Michael Ecklund
quelle
1
Bitte setzen Sie Ihre Änderungen zurück und stellen Sie eine neue Frage, anstatt nur eine vorhandene zu ergänzen. Das Abrufen von Bildschirmoptionen unterscheidet sich stark vom Abrufen von Meta-Boxen.
EAMann

Antworten:

9

Nicht wirklich, aber Sie können Ihre eigenen definieren. Alle Meta-Boxen werden in der globalen Variablen gespeichert, $wp_meta_boxesdie ein mehrdimensionales Array ist.

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

Dieses Array zeigt alle Meta-Boxen an, die für einen bestimmten Bildschirm und einen bestimmten Kontext registriert sind. Sie können auch einen weiteren Drilldown durchführen, da dieses Array auch ein mehrdimensionales Array ist, das Meta-Boxen nach Priorität und ID trennt.


Angenommen, Sie möchten ein Array erhalten, das alle Meta-Boxen enthält, die im Admin-Dashboard "normale" Priorität haben. Sie würden Folgendes nennen:

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

Dies ist identisch mit dem globalen Array $wp_meta_boxes['dashboard']['normal']und es ist auch ein mehrdimensionales Array.

Kern-Meta-Boxen entfernen

Angenommen, Sie möchten eine Reihe von Meta-Boxen entfernen. Die obige Funktion kann leicht angepasst werden, um Folgendes zu nutzen:

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

Wenn Sie beispielsweise das Widget für eingehende Links aus dem Dashboard entfernen möchten, rufen Sie Folgendes auf:

remove_meta_boxes( 'dashboard', 'normal', 'core', 'dashboard_incoming_links' );
EAMann
quelle
Hey, ich weiß, es ist lange her, dass du geantwortet hast, aber könntest du bitte meine Frage zu genau diesem Problem beantworten? Das globalfunktioniert bei mir nicht! Vielen Dank. wordpress.stackexchange.com/questions/318834/…
middlelady
1

Im WordPress-Dashboard werden Meta-Boxen angezeigt. Es gibt eine normale Spalte und eine Seitenspalte.

Ich kann eine Liste der registrierten Meta-Boxen abrufen und sie mithilfe des folgenden Codes aus dem Dashboard entfernen:

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

Verwenden Sie einfach print_r($wp_meta_boxes);, um eine Liste der registrierten Meta-Boxen anzuzeigen.

Michael Ecklund
quelle
1
Dieser Code enthält keine Liste der verfügbaren Meta-Boxen.
Fuxia
@toscho Es tut, wenn Sieprint_r($wp_meta_boxes);
Michael Ecklund