Entfernen Sie Custom Taxonomy Metabox aus dem Bildschirm Custom Post Type

15

Ich habe zwei hierarchische benutzerdefinierte Taxonomien, die sich jeweils auf einen entsprechenden benutzerdefinierten Beitragstyp beziehen. Ich möchte die Metabox für jeden Beitragstyp auf dem Bearbeitungsbildschirm des Beitragstyps entfernen.

Ich habe Benutzerdefinierte Taxonomie-Metabox aus benutzerdefiniertem Beitragstyp entfernen gelesen und Wie entferne ich eine (hierarchische) Taxonomie-Metabox im Kategoriestil? aber ich stecke immer noch fest.

Die Funktion, die ich benutze, ist:

function remove_taxonomies_metaboxes() {
    remove_meta_box( 'partner_typediv', 'partners', 'normal' );
    remove_meta_box( 'person_typediv', 'people', 'normal' );
}
add_action( 'admin_menu' , 'remove_taxonomies_metaboxes' );

Ich habe die post_types und custom_taxonomies nicht korrigiert, aber das war's. Ich habe versucht , die Verwendung von admin_menuHaken und die add_meta_boxesvom Codex empfohlen Haken. Ich habe beide normalund sidefür den dritten Parameter versucht .

Die obige Funktion befindet sich in einer mu-pluginsDatei unterhalb der Funktion, die die Beitragstypen und Taxonomien registriert.


EDIT: Es war ein Tippfehler in der Funktion register_taxonomy. Ich bin eine schreckliche Person. Danke an alle für die Hilfe. Ich habe noch ein paar Sachen gelernt!

mrwweb
quelle
sogar mit 'show_ui' => false?
JMau
1
Ich möchte die Benutzeroberfläche immer noch im Menü haben, nur nicht beim Bearbeiten eines Beitrags.
Mrwweb

Antworten:

35

Wenn Sie Ihre benutzerdefinierte Taxonomie manuell über register_taxonomy registrieren , können Sie Argumente übergeben, um zu steuern, wo die Metabox angezeigt wird.

In dem folgenden Beispiel würde die Einstellung show_uizum falsevollständigen Entfernen der Metabox aus dem Bearbeitungsbildschirm, dem Schnellbearbeitungsbildschirm und dem Admin-Menü entfernt. Wenn Sie dies jedoch festlegen show_ui, können trueSie eine differenziertere Steuerung erzielen, indem Sie die Argumente show_in_quick_editund verwenden meta_box_cb( wenn Sie später false festlegen, wird die Metabox wie gewünscht auf dem CPT-Bearbeitungsbildschirm ausgeblendet).

register_taxonomy( 'your_custom_taxonomy', array( 'your_custom_post_type' ), $args );
$args = array(
    'show_ui'                    => true,
    'show_in_quick_edit'         => false,
    'meta_box_cb'                => false,
);
locomo
quelle
Es funktioniert. Behalten Sie das Admin-Menü bei und entfernen Sie die benutzerdefinierte Taxonomie im Formular. Vielen Dank.
IT Vlogs
Vielen Dank! Ich suchte nach 'meta_box_cb' => false, um es in post-new zu verbergen, wobei durch das Setzen auf null nur die Standard-WordPress-Version angezeigt wird.
Ryan H
Reibungslos und einfach.
Travis van der Font
6

Sie möchten die Kästchen aus dem postBearbeitungsbildschirm entfernen , nicht aus dem Bildschirm " Beitragstyp", und davon ausgehen, dass Sie Ihre Taxonomie nur für die Beitragstypen registrieren können, auf die sie angewendet werden soll, und dies insgesamt vermeiden. Das Beispiel im Codex registriert die Beispieltaxonomie nur für den bookBeitragstyp wie:

register_taxonomy( 'genre', array( 'book' ), $args );

Ich denke, das ist, was Sie tun müssen, aber Sie haben keinen Registrierungscode für die Beitragstypen oder Taxonomien veröffentlicht.

Wenn Sie die Meta-Boxen selbst erstellt haben - das heißt, diese Boxen sind nicht die Standard-Boxen -, können Sie dieses Problem vermeiden, indem Sie die Meta-Boxen in den posttypspezifischen Hooks registrieren :

do_action('add_meta_boxes_' . $post_type, $post);

Oder folgen Sie dem obigen Beispiel:

add_action('add_meta_boxes_book', 'your-box-callback');

Einer dieser Ansätze sollte dies für Sie lösen. Ich denke nicht, dass Sie überhaupt verwenden müssen remove_meta_box.

Wenn Sie versuchen, die Meta-Boxen aus dem Beitragstyp zu entfernen, für den sie registriert sind, funktioniert dies (ebenfalls gemäß dem Beispiel im Codex):

function remove_taxonomies_metaboxes() {
    remove_meta_box( 'genrediv', 'book', 'side' );
}
add_action( 'add_meta_boxes_book' , 'remove_taxonomies_metaboxes' );

Ich bin mir ziemlich sicher, dass admin_menudas zu früh ist, habe das aber nicht verifiziert. add_metaboxesfunktioniert auch bei mir Ich weiß nicht, warum es bei dir nicht funktioniert.

s_ha_dum
quelle
Entschuldigung für die Unklarheit. Ich wollte den Beitrag Type Bildschirm. Jede Taxonomie ist nur für einen benutzerdefinierten Beitragstyp registriert. Ich habe versucht, den Haken add_meta_boxes_ * kurz zu verwenden, aber ich werde einige Variationen davon ausprobieren (obwohl ich die automatisch generierten Metaboxen verwende).
Mrwweb
Dann sollte es die letzte Option in der Antwort tun. Ich habe es getestet. Die Box geht weg. Ich kann nicht sagen, dass ich die Logik verstehe, Taxonomien ohne die Kästchen zu haben.
s_ha_dum
(Siehe Bearbeiten oben. Es war ein Tippfehler. Das liegt an mir ... Danke für die Hilfe). Um Ihre Frage zu beantworten, zeige ich die Taxonomien mit einem erweiterten benutzerdefinierten Feld an (dies ist eine bessere Benutzeroberfläche für die Benutzer der Website).
Mrwweb
Ihr letztes Beispiel hat mich in die richtige Richtung gebracht, aber das hat bei mir funktioniert: add_action ('admin_menu', 'remove_taxonomies_metaboxes');
Marcos Buarque
Ich habe festgestellt, dass diese Syntax mit der aktuellen Version von WordPress nicht funktioniert. Überprüfen Sie diese Antwort auf eine funktionierende Lösung.
Davey
3

Bei Verwendung von ACF für die Verwaltung benutzerdefinierter Taxonomien sind die Standardmetaboxen nicht erforderlich. Ich habe diesen Code erfolgreich ausprobiert:

      function remove_cuttax_metaboxes() {
           $post_type = 'post';
           $taxonomy = 'custom_taxonomy_slug';
           remove_meta_box( 'tagsdiv'.$taxonomy, $post_type, 'side' );

       }
       add_action( 'admin_menu' , 'remove_cuttax_metaboxes', 100 );

Die niedrigere Priorität (100) lässt diesen Code auch dann funktionieren, wenn die Taxonomien von einem Plugin wie CPT-UI erstellt werden.

fabiodipa
quelle
tagsdiv sollte nachgestellt haben -: remove_meta_box( 'tagsdiv-'.$taxonomy, $post_type, 'side' );
Greg Haygood