2014-12-11 48 views
0

我一直在构建自定义的帖子类型,并希望包含自定义元框但我无法保存。自定义元框不保存

这是我的自定义后类型的函数,它的工作原理

// Custom post type function 
function custom_post_type() { 

// Set UI labels for Custom Post Type 
    $labels = array(
     'name'    => _x('Models', 'Post Type General Name', 'metro'), 
     'singular_name'  => _x('Model', 'Post Type Singular Name', 'metro'), 
     'menu_name'   => __('Models', 'metro'), 
     'parent_item_colon' => __('Parent Model', 'metro'), 
     'all_items'   => __('All Models', 'metro'), 
     'view_item'   => __('View Model', 'metro'), 
     'add_new_item'  => __('Add New Model', 'metro'), 
     'add_new'    => __('Add New', 'metro'), 
     'edit_item'   => __('Edit Model', 'metro'), 
     'update_item'   => __('Update Model', 'metro'), 
     'search_items'  => __('Search Model', 'metro'), 
     'not_found'   => __('Not Found', 'metro'), 
     'not_found_in_trash' => __('Not found in Trash', 'metro'), 
    ); 

// Set other options for Custom Post Type 

    $args = array(
     'label'    => __('Models', 'metro'), 
     'description'   => __('Model news and reviews', 'metro'), 
     'labels'    => $labels, 
     // Features this CPT supports in Post Editor 
     'supports'   => array('title', 'editor', 'author', 'thumbnail', 'revisions'), 
     // You can associate this CPT with a taxonomy or custom taxonomy. 
     //'taxonomies'   => array('genres'), 
     /* A hierarchical CPT is like Pages and can have 
     * Parent and child items. A non-hierarchical CPT 
     * is like Posts. 
     */ 
     'hierarchical'   => false, 
     'public'     => true, 
     'show_ui'     => true, 
     'show_in_menu'   => true, 
     'show_in_nav_menus'  => true, 
     'show_in_admin_bar'  => true, 
     'menu_position'   => 5, 
     'can_export'    => true, 
     'has_archive'    => true, 
     'exclude_from_search'  => false, 
     'publicly_queryable'  => true, 
     'capability_type'   => 'post', 
     'register_meta_box_cb' => 'add_models_metaboxes' 
    ); 

    // Registering your Custom Post Type 
    register_post_type('Models', $args); 

} 

/* Hook into the 'init' action so that the function 
* Containing our post type registration is not 
* unnecessarily executed. 
*/ 

add_action('init', 'custom_post_type'); 

这是metabox代码

/** 
* Custom MetaBoxes 
*/ 

function add_models_metaboxes() { 
    add_meta_box('tj_modeldetails', 'Model Details', 'tj_modeldetails', 'models', 'normal', 'high'); 
} 

// The Event Location Metabox 

function tj_modeldetails() { 
    global $post; 

    // Noncename needed to verify where the data originated 
    echo '<input type="hidden" name="eventmeta_noncename" id="eventmeta_noncename" value="' . 
    wp_create_nonce(plugin_basename(__FILE__)) . '" />'; 

    // Get the location data if its already been entered 
    $dress_size = get_post_meta($post->ID, '_dress_size', true); 
    $height  = get_post_meta($post->ID, '_height', true); 
    $bust  = get_post_meta($post->ID, '_bust', true); 
    $waist  = get_post_meta($post->ID, '_waist', true); 
    $hips  = get_post_meta($post->ID, '_hips', true); 
    $shoe  = get_post_meta($post->ID, '_shoe', true); 
    $hair  = get_post_meta($post->ID, '_hair', true); 
    $eyes  = get_post_meta($post->ID, '_eyes', true); 

    // Echo out the field 
    echo '<p>Dress Size:</p>'; 
    echo '<input type="text" name="_dress_size" value="' . $dress_size . '" class="widefat" />'; 

    echo '<p>Height:</p>'; 
    echo '<input type="text" name="_height" value="'. $height . '" class="widefat" />'; 

    echo '<p>Bust:</p>'; 
    echo '<input type="text" name="_bust" value="'. $bust . '" class="widefat" />'; 

    echo '<p>Waist:</p>'; 
    echo '<input type="text" name="_waist" value="'. $waist . '" class="widefat" />'; 

    echo '<p>Hips:</p>'; 
    echo '<input type="text" name="_hips" value="'. $hips . '" class="widefat" />'; 

    echo '<p>Shoe:</p>'; 
    echo '<input type="text" name="_shoe" value="'. $shoe . '" class="widefat" />'; 

    echo '<p>Hair:</p>'; 
    echo '<input type="text" name="_hair" value="'. $hair . '" class="widefat" />'; 

    echo '<p>Eyes:</p>'; 
    echo '<input type="text" name="_eyes" value="'. $eyes . '" class="widefat" />'; 


} 

function tj_save_models_meta($post_id, $post) { 
    // verify this came from our screen with proper authorisation. 
    if (!wp_verify_nonce($_POST['modelmeta_noncename'], plugin_basename(__FILE__))) { 
     return $post->ID; 
    } 

    // is user allowed to edit the post or page 
    if (!current_user_can('edit_post', $post->ID)) 
     return $post->ID; 

    // Put metaboxes into an array 

    $models_meta['_dress_size'] = $_POST['_dress_size']; 
    $models_meta['_height']  = $_POST['_height']; 
    $models_meta['_bust']  = $_POST['_bust']; 
    $models_meta['_waist']  = $_POST['_waist']; 
    $models_meta['_hips']  = $_POST['_hips']; 
    $models_meta['_shoe']  = $_POST['_shoe']; 
    $models_meta['_hair']  = $_POST['_hair']; 
    $models_meta['_eyes']  = $_POST['_eyes']; 

    foreach ($models_meta as $key => $value) { 
     if($post->post_type == 'revision') return; // don't store custom data twice 
     #$value = implode(',', (array)$value); // If $value is an array, make it a CSV (unlikely) 

     if(get_post_meta($post->ID, $key, FALSE)) { 
      update_post_meta($post->ID, $key, $value); 
     } else { 
      add_post_meta($post->ID, $key, $value); 
     } 

     if(!$value) delete_post_meta($post->ID, $key); 
    } 
} 

add_action('save_post', 'tj_save_models_meta', 1, 2); 

虽然metaboxes确实显示在后窗口,当我点击发布值不保存。任何想法我失踪?

回答

0

确认现时要失败的,有看了一下代码的随机数场被称为 “eventmeta_noncename”

echo '<input type="hidden" name="eventmeta_noncename" id="eventmeta_noncename"

被验证的一个是 “modelmeta_noncename”

if (!wp_verify_nonce($_POST['modelmeta_noncename'],

+0

非常感谢。我认为这会是那样的小事。 – Tristan 2014-12-11 08:43:07