मैंने इसे हल करके 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'] );
}