我通过post-new.php
, 并检查category_id
请求参数。如果它不存在,我会显示一个带有类别下拉列表的表单,提交回该页面,然后调用exit()
因此,常规post表单不会显示。如果存在,我会为wp_insert_post
这将添加类别。这是因为已经通过在数据库中创建了一篇新文章the get_default_post_to_edit()
function, 我们可以添加类别、标签或其他(元)内容。表单在此之后呈现为“新鲜”的新内容。
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\'] );
}