Benutzerdefinierter Post-Typ, habe nur meine Meta-Boxen

Ich arbeite an einem Plugin, für das ich einen benutzerdefinierten Post-Typ und mehrere Meta-Boxen auf der Post-Seite erstellen.

Das Thema, das ich habe, scheint jedoch auf den Seiten aller benutzerdefinierten Beitragstypen eine Anzeigenmeta-Box hinzuzufügen (Upgrade auf unser Premiumthema usw.).

Ich betrachte dies als Missbrauch und möchte diese Meta-Box oder andere externe Meta-Felder auf meiner Post-Typ-Seite nicht, nur die, die ich hinzufüge.

Wie kann ich alle Meta-Felder außer meinem eigenen löschen?

Edit : Ich suche nach einem allgemeinen Ansatz dazu. Wenn ich mein Plugin der Öffentlichkeit zugänglich mache, möchte ich sicher sein, dass es auf meiner Post-Seite, wenn möglich, keine anderen Metaboxen aus anderen Themen und Plugins gibt.

Solutions Collecting From Web of "Benutzerdefinierter Post-Typ, habe nur meine Meta-Boxen"

Sie können remove_meta_box () verwenden, um dies zu erreichen.

Um remove_meta_box() , benötigen Sie 3 Informationen:

  1. die id der Meta-Box, die Sie entfernen möchten
  2. den screen (oder die Bildschirme), aus denen sie entfernt werden sollen
  3. der context es hinzugefügt wurde (zB “Seite”, “normal” usw.)

Um diese 3 Informationen zu erhalten, suchen Sie in der Quelle nach dem Thema für add_meta_box() , die zum Hinzufügen der Meta-Box verwendet werden.

Und falls es nicht offensichtlich ist, stellen Sie sicher, dass Sie remove_meta_box() in einer Aktion aufrufen, die nach jeder Aktion ausgetriggers wird, zu der die Meta-Box hinzugefügt wurde.

Zum Beispiel, wenn das Thema wie folgt aussieht:

 add_action ('after_theme_setup', 'add_theme_meta_boxes') ; function add_theme_meta_boxes () { add_meta_box ('ad-to-upgrade-to-pro', 'Upgrade to Pro', 'render_upgrade_ad', 'post', 'normal', 'high') ; return ; } 

Das Plugin sollte folgendes enthalten:

 // make sure you hook to an action that is fired *after* the meta box was added add_action ('init', 'remove_theme_ad_meta_box') ; function remove_theme_ad_meta_box () { remove_meta_box ('ad-to-upgrade-to-pro', 'post', 'normal') ; return ; } 

Bearbeiten

Um die Frage zu beantworten, die im Kommentar gefragt wird: es ist nicht möglich absolut zu garantieren, dass kein anderes Theme / plugin Meta-Boxen hinzufügt.

Außerdem ist es bei einem offenen System wie WP keine gute Idee, das zu tun, was Sie versuchen (IMHO). Es gibt eine ganze Reihe von “Allzweck” -Plugins, die legitime Gründe dafür haben, Meta-Boxen zu den CPT- post{,-new}.php Bildschirmen post{,-new}.php .

Zum Beispiel fügt das WordPress SEO- Plugin jedem Post-Typ, der “sichtbar” ist, eine Meta-Box hinzu, die das Hinzufügen von SEO-bezogenen Metadaten zur öffentlichen Seite für Beiträge erlaubt (Anmerkung: WordPress SEO ist nicht als Unterstützung gedacht, es ist nur die Erste, die mir in den Sinn kam).

Zusätzlich zu der obigen Antwort. Für die vorhandenen Metaboxen sind globale Variablen verfügbar. Sie können auch den neuesten Action / Filter-Hook auf Ihrem CPT finden (wahrscheinlich do_meta_boxes ) und einfach alles entfernen.

Global: global $wp_meta_boxes;

Sehen Sie sich die remove_meta_box function an, wie sie funktioniert: https://developer.wordpress.org/reference/functions/remove_meta_box/

So wird es etwa so sein:

 add_action( 'do_meta_boxes', 'my_metabox_hack', 99, 3 ); function my_metabox_hack( $post_type, $cur_context, $post ) { global $wp_meta_boxes; $screen_id = 'YOUR_SCREEN_ID'; // Remove anything there foreach ( $wp_meta_boxes[$screen_id] as $context => $priorities ) { if ( $context !== $cur_context ) { continue; } if ( empty( $priorities ) ) { $wp_meta_boxes[$screen_id][$context] = array(); continue; } foreach ( $priorities as $priority => $metabox_id ) { $wp_meta_boxes[$screen_id][$context][$priority] = array(); } } // Now add your own metaboxes bases on the $cur_context parameter. // add_meta_box( $id, $title, $callback, $screen, etc.... ) } 

Denken Sie daran, dass diese Klobale ALLE Meta-Boxen enthält, nicht nur für CPTs!

Ich halte dies für einen Hack, also bitte seien Sie sehr vorsichtig, wenn Sie diesen Ansatz verwenden. Es ist NICHT WP-Code-Standards und wenn es nicht richtig verwendet wird, kann es andere Plugins / functionen brechen.

EDIT: Ich habe auch eine Aktionspriorität hinzugefügt. Sie können es noch höher einstellen, um sicherzustellen, dass diese Aktion als letzte ausgeführt wird.

EDIT2 Beachten Sie auch, dass diese Aktion mehrere Male ausgetriggers werden kann und drei Parameter für jeden $context -Kontext hat. Modifiziert den Code für dies widerspiegeln.