Übergeordnete Kategorien nicht auswählbar machen

Ich möchte, dass meine Kategorien, die untergeordnete Kategorien haben, nicht auf der Post-Artikelseite ausgewählt werden können.

Was ich tun möchte, ist das Kontrollkästchen vor dem Etikett zu entfernen.

Ich habe die Filterdokumentation durchgesehen, aber ich konnte keinen Filter finden, der meinen Anforderungen entspricht.

Solutions Collecting From Web of "Übergeordnete Kategorien nicht auswählbar machen"

Ich bezweifle wirklich, dass das filterbar ist, also kommt jQuery zur Rettung 🙂

Der Code

add_action( 'admin_footer-post.php', 'wpse_22836_remove_top_categories_checkbox' ); add_action( 'admin_footer-post-new.php', 'wpse_22836_remove_top_categories_checkbox' ); function wpse_22836_remove_top_categories_checkbox() { global $post_type; if ( 'post' != $post_type ) return; ?>  < ?php } 

Das Ergebnis

keine übergeordneten Kategorien


Fortgeschritten

Es gibt einen Vorbehalt: Wenn man eine Unterkategorie auswählt, kommt sie aus der Hierarchie heraus ...

Also, das Folgende ist der Code aus dem ausgezeichneten Plugin von Scribu, Kategorie Checklistenbaum , zusammen mit dem vorherigen Code.

Auf dem Post-Bearbeitungsbildschirm werden Sie nach dem Speichern eines Beitrags feststellen, dass die überprüften Kategorien oben angezeigt werden, wodurch die Kategoriehierarchie durchbrochen wird. Dieses Plugin entfernt dieses "Feature".

Entweder du verwendest den vorherigen Code und installierst das Plugin, oder legst es einfach in die functions.php deines Themes oder in ein benutzerdefiniertes Plugin von dir (vorzugsweise, so dass alle deine Tweaks themenunabhängig sind).

 /* Based on Category Checklist Tree, by scribu Preserves the category hierarchy on the post editing screen Removes parent categories checkbox selection */ class Category_Checklist { function init() { add_filter( 'wp_terms_checklist_args', array( __CLASS__, 'checklist_args' ) ); } function checklist_args( $args ) { add_action( 'admin_footer', array( __CLASS__, 'script' ) ); $args['checked_ontop'] = false; return $args; } // Scrolls to first checked category function script() { ?>  < ?php } } Category_Checklist::init(); 

Fast genau so wie bei brasofilo, mein Code unten berücksichtigt auch verschiedene Taxonomien und entfernt das Kontrollkästchen für Elternkategorien auf der obersten Ebene, nur wenn sie Kinder haben. Dadurch können andere Top-Level-Kategorien, die kinderlos sind, noch ausgewählt werden. Ich habe diesen einfachen Code in die Datei functions.php meines Themes geschrieben:

 class Category_Checklist { function init() { add_filter( 'wp_terms_checklist_args', array( __CLASS__, 'checklist_args' ) ); } function checklist_args( $args ) { add_action( 'admin_footer', array( __CLASS__, 'script' ) ); $args['checked_ontop'] = false; return $args; } // Scrolls to first checked category function script() { ?>  < ?php } } Category_Checklist::init(); 

Es kann auch mit dem “Category Checklist Tree” -Plugin gemacht werden, um die Taxonomie-Hierarchie zu verwalten, wie es in brasofilo und einigen CSS heißt:

 #categorychecklist > li > label.selectit > input { display: none !important; } 

(#categorychecklist kann durch #yourcustomtaxonomychecklist ersetzt werden, um dies auf eine custo-Taxonomie anzuwenden)

Um diese und andere CSS zu WordPress Admin hinzuzufügen, kann functions.php hinzugefügt werden:

 function my_admin_head() { echo ''; } add_action('admin_head', 'my_admin_head'); 

Fügen Sie dann das Stylesheet “admin.css” zu Ihrem Design-Verzeichnis hinzu und fügen Sie das obige css hinzu

Hier ist, was ich verwendet habe, um die übergeordneten Kategorien zu deaktivieren und nur eine Kategorie pro Post zu erlauben. Dieser Code ändert auch die Schnellbearbeitungskategorien. Ich begrüße jemanden, um es aufzuräumen, ich bin nicht zuversichtlich in Javascript.

Ich habe den ersten Teil hier: https://wordpress.org/support/topic/making-category-selection-radio-buttons

  /* ONLY ALLOW ONE CATEGORY PER POST */ add_action( 'admin_footer', 'catlist2radio' ); function catlist2radio(){ echo ''; } /* DISABLE PARENT CATEGORIES FOR POSTS */ /* Based on Category Checklist Tree, by scribu Preserves the category hierarchy on the post editing screen Removes parent categories checkbox selection */ class Category_Checklist { function init() { add_filter( 'wp_terms_checklist_args', array( __CLASS__, 'checklist_args' ) ); } function checklist_args( $args ) { add_action( 'admin_footer', array( __CLASS__, 'script' ) ); $args['checked_ontop'] = false; return $args; } // Scrolls to first checked category function script() { ?>  < ?php } } Category_Checklist::init(); 

Ich benutzte eine Kombination der oben genannten, um meine Lösung zu bekommen. Ich mochte den reinen css-Ansatz, aber die Label-Klick-Aktion würde immer noch das “checked” -Attribut der Checkbox ändern, obwohl es nicht angezeigt wurde. Hier ist meine Lösung, beachten Sie, dass es hart codiert ist, die ersten beiden Kategorien zu verbergen.

CSS:

 #categorychecklist > li > label.selectit, #categorychecklist > li > ul.children > li > label.selectit {cursor: text;} #categorychecklist > li > label.selectit > input, #categorychecklist > li > ul.children > li > label.selectit > input { display: none !important; } 

js (Wenn das Kontrollkästchen ausgeblendet ist, brechen Sie das Click-Ereignis ab. functioniert auf jeder Ebene):

 $('#categorychecklist > li label.selectit').on('click', function(event) { if (!$(this).children("input").is(':visible')) event.preventDefault(); }); 

Und um auf admin zu verweisen:

 function add_admin_assets() { wp_enqueue_style( "admin-custom-css", get_bloginfo('template_url').'/assets/styles/custom/admin.css'); wp_enqueue_script('admin-custom-js', get_bloginfo('template_url').'/inc/js/admin.js', array(), null, true); } add_action('admin_head', 'add_admin_assets');