Force-Kategorie auswählen, bevor Sie einen neuen Beitrag erstellen?

Wie kann ich den Benutzer zwingen, zuerst eine Kategorie auszuwählen, bevor er beim Erstellen eines neuen Beitrags mit dem Editor fortfährt? Ich möchte einige Standardinhalte einstellen , aber dies basiert auf der Kategorie, also muss ich das wissen, bevor ich den Editor zeige (es sei denn, ich mache ein paar ausgefallene Ajax-Sachen, aber in diesem Fall möchte ich das nicht tun).

Solutions Collecting From Web of "Force-Kategorie auswählen, bevor Sie einen neuen Beitrag erstellen?"

Ich triggerse dies, indem ich mich in post-new.php und nach einem request-Parameter category_id post-new.php . Wenn es nicht vorhanden ist, zeige ich ein Formular mit einer Dropdown-Kategorie an, die auf diese Seite zurückgibt und dann exit() aufruft, damit das normale Postformular nicht angezeigt wird. Wenn es existiert, wp_insert_post ich einen Haken für wp_insert_post , der die Kategorie hinzufügt. Dies funktioniert, weil ein neuer Post bereits in der database über die function get_default_post_to_edit() wurde und wir Kategorien, Tags oder andere (Meta) Inhalte hinzufügen können. Das Formular wird danach mit dem “frischen” neuen Inhalt gerendert.

 add_filter( 'load-post-new.php', 'wpse14403_load_post_new' ); function wpse14403_load_post_new() { $post_type = 'post'; if ( isset( $_REQUEST['post_type'] ) ) { $post_type = $_REQUEST['post_type']; } // Only do this for posts if ( 'post' != $post_type ) { return; } if ( array_key_exists( 'category_id', $_REQUEST ) ) { add_action( 'wp_insert_post', 'wpse14403_wp_insert_post' ); return; } // Show intermediate screen extract( $GLOBALS ); $post_type_object = get_post_type_object( $post_type ); $title = $post_type_object->labels->add_new_item; include( ABSPATH . 'wp-admin/admin-header.php' ); $dropdown = wp_dropdown_categories( array( 'name' => 'category_id[]', 'hide_empty' => false, 'echo' => false, ) ); $category_label = __( 'Category:' ); $continue_label = __( 'Continue' ); echo < < 

{$title}

{$category_label} {$dropdown}
HTML; include( ABSPATH . 'wp-admin/admin-footer.php' ); exit(); } // This function will only be called when creating an empty post, // via `get_default_post_to_edit()`, called in post-new.php function wpse14403_wp_insert_post( $post_id ) { wp_set_post_categories( $post_id, $_REQUEST['category_id'] ); }