Tôi đã giải quyết điều này bằng cách nối vào post-new.php
và kiểm tra category_id
tham số yêu cầu. Nếu nó không tồn tại, tôi sẽ hiển thị một biểu mẫu với danh sách thả xuống thể loại gửi lại trang này và sau đó gọi exit()
để biểu mẫu bài đăng thông thường không hiển thị. Nếu nó tồn tại, tôi thiết lập một hook cho wp_insert_post
nó sẽ thêm thể loại. Này hoạt động vì một bài mới đã được tạo ra trong cơ sở dữ liệu thông qua các get_default_post_to_edit()
chức năng , và chúng ta có thể thêm các danh mục, thẻ hoặc khác (meta) nội dung. Biểu mẫu được hiển thị sau này với nội dung mới "mới".
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'] );
}