我创建了两个自定义分类法,即州和省,但无法将数据保存在wp admin的自定义构建元框中:
<?php function custom_meta_box() {
remove_meta_box( \'tagsdiv-states\', \'post\', \'side\' );
remove_meta_box( \'tagsdiv-provinces\', \'post\', \'side\' );
add_meta_box( \'tagsdiv-states\', \'US States\', \'states_meta_box\', \'post\', \'side\' );
add_meta_box( \'tagsdiv-provinces\', \'Canada Provinces\', \'provinces_meta_box\', \'post\', \'side\' );
}
add_action(\'add_meta_boxes\', \'custom_meta_box\');
/* Prints the taxonomy box content */
function states_meta_box($post) {
$tax_name = \'states\';
$taxonomy = get_taxonomy($tax_name);
?>
<div class="tagsdiv" id="<?php echo $tax_name; ?>">
<div class="jaxtag">
<?php
// Use nonce for verification
wp_nonce_field( plugin_basename( __FILE__ ), \'states_noncename\' );
$states_IDs = wp_get_object_terms( $post_id, \'states\', array(\'fields\' => \'ids\') );
wp_dropdown_categories(\'taxonomy=states&hide_empty=0&orderby=name&name=states&show_option_none=Select US State&selected=\'.$states_IDs[0]); ?>
<p class="howto">Select US State</p>
</div>
</div>
<?php
}
/* When the post is saved, saves our custom taxonomy */
function states_save_postdata( $post_id ) {
// verify if this is an auto save routine.
// If it is our form has not been submitted, so we dont want to do anything
if ( ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) || wp_is_post_revision( $post_id ) )
return;
// verify this came from the our screen and with proper authorization,
// because save_post can be triggered at other times
if ( !wp_verify_nonce( $_POST[\'states_noncename\'], plugin_basename( __FILE__ ) ) )
return;
// Check permissions
if ( \'post\' == $_POST[\'post_type\'] )
{
if ( !current_user_can( \'edit_page\', $post_id ) )
return;
}
else
{
if ( !current_user_can( \'edit_post\', $post_id ) )
return;
}
// OK, we\'re authenticated: we need to find and save the data
$states_ID = $_POST[\'states\'];
$states = ( $states_ID > 0 ) ? get_term( $states_ID, \'states\' )->slug : NULL;
wp_set_object_terms( $post_id , $states, \'states\' );
}
/* Do something with the data entered */
add_action( \'save_post\', \'states_save_postdata\' );
/* Prints the taxonomy box content */
function provinces_meta_box($post) {
$tax_name = \'provinces\';
$taxonomy = get_taxonomy($tax_name);
?>
<div class="tagsdiv" id="<?php echo $tax_name; ?>">
<div class="jaxtag">
<?php
// Use nonce for verification
wp_nonce_field( plugin_basename( __FILE__ ), \'provinces_noncename\' );
$provinces_IDs = wp_get_object_terms( $post_id, \'provinces\', array(\'fields\' => \'ids\') );
wp_dropdown_categories(\'taxonomy=provinces&hide_empty=0&orderby=name&name=provinces&show_option_none=Select Province&selected=\'.$provinces_IDs[0]); ?>
<p class="howto">Select Canadian Province</p>
</div>
</div>
<?php
}
/* When the post is saved, saves our custom taxonomy */
function provinces_save_postdata( $post_id ) {
// verify if this is an auto save routine.
// If it is our form has not been submitted, so we dont want to do anything
if ( ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) || wp_is_post_revision( $post_id ) )
return;
// verify this came from the our screen and with proper authorization,
// because save_post can be triggered at other times
if ( !wp_verify_nonce( $_POST[\'provinces_noncename\'], plugin_basename( __FILE__ ) ) )
return;
// Check permissions
if ( \'post\' == $_POST[\'post_type\'] )
{
if ( !current_user_can( \'edit_page\', $post_id ) )
return;
}
else
{
if ( !current_user_can( \'edit_post\', $post_id ) )
return;
}
// OK, we\'re authenticated: we need to find and save the data
$provinces_ID = $_POST[\'provinces\'];
$provinces = ( $provinces_ID > 0 ) ? get_term( $provinces_ID, \'provinces\' )->slug : NULL;
wp_set_post_terms( $post_id , $provinces, \'provinces\' );
}
/* Do something with the data entered */
add_action( \'save_post\', \'provinces_save_postdata\' );?>