Wie entferne ich bestimmte Bildschirmoptionen und Meta-Boxen aus dem Beitragstyp Hinzufügen / Bearbeiten?

10

Wenn Sie jetzt einen bestimmten Beitrag innerhalb Ihres gewünschten Beitragstyps hinzufügen oder bearbeiten, stehen Ihnen auch weitere Bildschirmoptionen zur Verfügung. Diese Bildschirmoptionen zeigen / verbergen jedoch Meta-Boxen. Ich möchte in der Lage sein, programmgesteuert eine Liste aller dieser registrierten Bildschirmoptionen von Meta-Boxen zu erhalten, damit ich erneut überprüfen kann, ob ein bestimmtes Array von Bildschirmoptionen vorhanden ist, und wenn dies der Fall ist, plane ich, sie programmgesteuert zu entfernen.

WordPress - Bildschirmoptionen - Hinzufügen oder Bearbeiten von Post-Meta-Boxen Klicken Sie hier für einen Screenshot in voller Größe

Frage Wie kann ich programmgesteuert eine Liste aller registrierten Bildschirmoptionen (Meta-Boxen) für Beitragstypen abrufen, in denen Sie einen bestimmten Beitrag innerhalb Ihres gewünschten Beitragstyps hinzufügen oder bearbeiten möchten?

Letztendlich besteht das Ziel hier darin, diese Optionen zu entfernen und nicht nur zu deaktivieren. Ich möchte etwas in der Art tun, wie ich unnötige Dashboard-Meta-Boxen entfernt habe .

Michael Ecklund
quelle

Antworten:

13

Was Sie brauchen, ist global $wp_meta_boxesindiziert von get_current_screen()->id. Durch Entfernen der Bildschirmoptionen werden auch die Metaboxen entfernt, die Sie ausführen können, bevor Bildschirmoptionen mithilfe des Hooks angezeigt werden 'in_admin_header'.

Nehmen wir also an, Sie möchten die Bildschirmoption "Trackbacks senden" entfernen, die Sie in diesem Screenshot sehen:

Fügen Sie die folgende Klasse in die functions.phpDatei Ihres Themas oder in ein Plugin ein, das Sie möglicherweise erstellen, und der Code entfernt die Bildschirmoption "Trackbacks senden" (und die zugehörige Metabox, die Sie auch wollten, oder?):

class Michael_Ecklunds_Admin_Customizer {
  function __construct() {
    add_action( 'in_admin_header', array( $this, 'in_admin_header' ) );
  }
  function in_admin_header() {
    global $wp_meta_boxes;
    unset( $wp_meta_boxes[get_current_screen()->id]['normal']['core']['trackbacksdiv'] );
  }
}
new Michael_Ecklunds_Admin_Customizer();

Und so sieht es aus, nachdem der obige Code zu einer WordPress 3.4-Site hinzugefügt wurde:

Unter Verwendung des Zend Debugger innerhalb PhpStorm hier ist die Inspektion von $wp_meta_boxes[get_current_screen()->id]so können Sie sehen , was eine 3.4 Standard - Installation von Wordpress - Werten hat im Postbearbeitungsbildschirm (Ich habe den Array - Indizes ich in meinem Beispiel verwiesen eingekreist, das heißt $wp_meta_boxes[get_current_screen()->id]['normal']['core']['trackbacksdiv']:

Hoffentlich haben Sie danach gesucht?

MikeSchinkel
quelle
3
Einfach unglaublich! Herzlichen Glückwunsch, Ecklund, Sie haben nicht nur eine kanonische, sondern auch eine legendäre Antwort erhalten .
Brasofilo
@brasofilo Danke für das Kompliment. Ich fühle mich geehrt.
MikeSchinkel
@MikeSchinkel Dies funktioniert beim Hinzufügen / Bearbeiten eines Beitrags und ich danke Ihnen dafür. Aber wie entfernen Sie Metafelder für Bildschirmoptionen für die Seite mit einer wp_list_table, die eine Liste aller Ihrer Beiträge enthält? Siehe Screenshot 1.
Michael Ecklund
@MichaelEcklund Hallo, ich denke, ich sollte keine Fragen beantworten, wenn ich zu müde bin, um die Frage vollständig zu verstehen, oder? Die Antwort auf die unbeantwortete Frage unterscheidet sich erheblich von der, die ich beantwortet habe. Es handelt sich also um zwei verschiedene Fragen. Wie würden Sie diese Frage bearbeiten, um zu fragen, was ich beantwortet habe, und dann eine weitere Frage hinzufügen, um zu fragen, was ich nicht getan habe? Wenn du das kannst und hier in den Kommentaren einen Link dazu postest, damit ich ihn finde, werde ich auch für diese Frage eine Antwort mit gleichwertigen Details posten. Andernfalls kann es kompliziert werden, eine zusammenhängende Antwort für beide zu schreiben.
MikeSchinkel
1
@ MichaelEcklund Cool, danke. Beantwortet: wordpress.stackexchange.com/a/56896/89
MikeSchinkel
0

Es tut mir leid, dass es ein bisschen nebensächlich ist, aber ich fand es nützlich, wenn es darum geht, wp-out-of-box-Meta-Boxen zu entfernen, aber nicht so sehr für benutzerdefinierte oder benutzerdefinierte themenbezogene Meta-Boxen. Um ein bisschen mehr zu veranschaulichen: Ich habe ein neues Thema installiert, das eine benutzerdefinierte Meta-Box einführte, wenn Sie einen neuen Beitrag / eine neue Seite in den Bildschirmoptionen anzeigen. (Ich bin neu in wp, also) Aus irgendeinem Grund konnte ich diese benutzerdefinierte Meta-Box mit Mikes Ansatz nicht entfernen, aber sie funktionierte für alles, was nicht benutzerdefiniert war. Für meine Dummheit schlug ich stundenlang gegen die Wand und konnte es immer noch nicht herausfinden, also musste ich darauf zurückkommen:

if (is_admin()) :
function my_remove_meta_boxes() 
{
  if(!current_user_can('administrator')) 
  {
    remove_meta_box('theme_custom_meta_box', 'post', 'side');
  }
}
add_action( 'add_meta_boxes', 'my_remove_meta_boxes' );
endif;
Yinnie
quelle