it-swarm.com.de

So entfernen Sie bestimmte Bildschirmoptionen und Meta-Boxen aus dem Post-Typ hinzufügen/bearbeiten?

Wenn Sie nun einen bestimmten Beitrag innerhalb des gewünschten Beitragstyps hinzufügen oder bearbeiten, stehen Ihnen 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 Metaboxen zu erhalten, damit ich erneut überprüfen kann, ob eine bestimmte Reihe von Bildschirmoptionen vorhanden ist, und falls dies der Fall ist, plane ich, sie programmgesteuert zu entfernen.

WordPress - Screen Options - Add or Edit Post - Meta Boxes Hier klicken für 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 ist das Ziel hier, diese Optionen zu entfernen und nicht einfach nur zu deaktivieren. Ich versuche, etwas in der Art zu tun, wie ich es erreicht habe, um unnötige Dashboard-Metakästen zu entfernen .

10
Michael Ecklund

Was Sie benötigen, ist ein globaler $wp_meta_boxes, der von get_current_screen()->id indiziert wird. Durch das Entfernen der Bildschirmoptionen werden auch die Metaboxen entfernt, die Sie unmittelbar vor dem Anzeigen der Bildschirmoptionen mithilfe des Hooks 'in_admin_header' ausführen können.

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

Ziehen Sie die folgende Klasse in die functions.php-Datei Ihres Themas oder in ein Plugin, das Sie möglicherweise erstellen, und der Code entfernt die Bildschirmoption "Send Trackbacks"und die zugehörige Metabox, die Sie auch haben möchten , Recht?):

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 einer WordPress 3.4-Site hinzugefügt wurde:

Verwenden des Zend-Debuggers in PhpStorm Hier ist die Inspektion von $wp_meta_boxes[get_current_screen()->id], damit Sie im Post-Bearbeitungsbildschirm sehen können, welche Werte eine Standardinstallation von WordPress 3.4 hat (Ich habe das Array eingekreist Indizes, auf die ich in meinem Beispiel verwiesen habe, dh $wp_meta_boxes[get_current_screen()->id]['normal']['core']['trackbacksdiv']:

Hoffentlich ist es das, wonach Sie gesucht haben?

13
MikeSchinkel

Es tut mir leid, aber ich fand es nützlich, wenn es darum geht, wp aus Box-Meta-Boxen zu entfernen, aber nicht so sehr für benutzerdefinierte oder themenbezogene Meta-Boxen. Um ein bisschen mehr zu veranschaulichen: Ich habe ein neues Thema installiert, das eine benutzerdefinierte Meta-Box einführt, wenn Sie einen Beitrag/eine Seite neu hinzufügen, die in den Bildschirmoptionen angezeigt wird. (Ich bin neu in wp so) Aus irgendeinem Grund mit Mikes Ansatz konnte ich diese benutzerdefinierte Meta-Box nicht entfernen, aber es funktionierte für alles, was nicht benutzerdefiniert ist. Aus 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;
0
Yinnie