Выбор категории силы перед созданием нового сообщения?

Как заставить пользователя сначала выбрать категорию, прежде чем продолжить редактирование при создании нового сообщения? Я хочу установить некоторый контент по умолчанию , но это зависит от категории, поэтому мне нужно знать, что перед показом редактора (если только я не делаю какой-то причудливый материал Ajax, но в этом случае я не хочу этого делать).

Solutions Collecting From Web of "Выбор категории силы перед созданием нового сообщения?"

Я решил это, подключившись к post-new.php и проверив параметр параметра category_id . Если он не существует, я показываю форму с раскрывающимся списком категорий, которая возвращается на эту страницу, а затем вызывает exit() поэтому обычная форма сообщения не отображается. Если он существует, я установил крючок для wp_insert_post , который добавит категорию. Это работает, потому что новая запись уже создана в базе данных через get_default_post_to_edit() , и мы можем добавлять категории, теги или другие (мета) контент. Форма создается после этого «новым» новым контентом.

 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 <<<HTML <div class="wrap"> <h2>{$title}</h2> <form method="get"> <table class="form-table"> <tbody> <tr valign="top"> <th scope="row">{$category_label}</th> <td>{$dropdown}</td> </tr> <tr> <td></td> <th><input name="continue" type="submit" class="button-primary" value="{$continue_label}" /></th> </tbody> </table> <input type="hidden" name="post_type" value="{$post_type}" /> </form> </div> 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'] ); }