персонализированные почтовые индексы не сохраняются

У меня есть следующий код. Я пытаюсь ввести данные в пользовательский метабокс, а затем сохранить его. Когда я перехожу к просмотру, он вошел в сообщение, однако в столбце имени ничего нет. Кроме того, когда я удаляю save, я получаю страницу post.php с пустой страницей, это страница, которую мне нужно создать в моей теме, и вернуть ее на текущую страницу или что-то в этом роде.

<? /** * Custom post-type booktime **/ add_action('init', 'booktime_register'); function booktime_register() { $labels = array( 'name' => _x('booktime', 'post type general name'), 'singular_name' => _x('booktime', 'post type singular name'), 'add_new' => _x('add new', 'add new'), 'add_new_item' => __('add new item'), 'edit_item' => __('edit item'), 'new_item' => __('new item'), 'view_item' => __('view item'), 'search_items' => __('search items'), 'not_found' => __('nothing here'), 'not_found_in_trash' => __('not found in trash'), 'parent_item_colon' => '' ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'query_var' => true, 'rewrite' => true, 'capability_type' => 'post', 'hierarchical' => false, 'menu_position' => null, 'supports' => array('title','editor','thumbnail','comments','custom-fields','revisions') ); register_post_type( 'booktime' , $args ); } ?> <?php add_action("manage_posts_custom_column", "booktime_custom_columns"); add_filter("manage_edit-booktime_columns", "booktime_edit_columns"); function booktime_custom_columns($column){ global $post; switch ($column) { case "name": the_excerpt(); break; case "address": $custom = get_post_custom(); echo $custom["address"][0]; break; case "phone": $custom = get_post_custom(); echo $custom["phone"][0]; break; case "date": $custom = get_post_custom(); echo $custom["date"][0]; break; case "bottles": $custom = get_post_custom(); echo $custom["bottles"][0]; break; } } function booktime_edit_columns($columns){ $columns = array( "cb" => "<input type=\"checkbox\" />", "title" => "Post should show", "description" => "name", "address" => "address", "phone" => "phone", "date" => "date", "bottles" => "bottles" ); return $columns; } ?> <?php add_action("admin_init", "admin_init_booktime"); function admin_init_booktime(){ add_meta_box("name", "name", "name", "booktime", "normal", "low"); } ?> <?php function name() { global $post; $custom = get_post_custom($post->ID); $name = ( !empty($custom["name"][0]) ) ? $custom["name"][0]: ""; ?> <p><label>Name:</label><br /> <input type="text" name="name" value="<?php echo $name; ?>"/></p> <?php } ?> <?php add_action('save_post', 'save_details_booktime'); function save_details_booktime(){ global $post; $custom_meta_fields = array( 'name' ); foreach( $custom_meta_fields as $custom_meta_field ): if(isset($_POST[$custom_meta_field]) && $_POST[$custom_meta_field] != ""): update_post_meta($post->ID, $custom_meta_field, $_POST[$custom_meta_field]); endif; endforeach; } ?> 

Вам нужно заменить имя поля на имя на другое, поскольку name является зарезервированным словом и может быть причиной пустой страницы, а также лучшей практикой префикса имени поля.

Теперь в вашей функции save_details_booktime убедитесь, что вы не являетесь правильным типом сообщения, а не автосохранением, что-то вроде этого:

  function save_details_booktime($post_id ) { global $post; //skip auto save if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return $post_id; } /check for you post type only if( $post->post_type != "booktime" ) { return; } $custom_meta_fields = array( 'name' ); //change from name to something else foreach( $custom_meta_fields as $custom_meta_field ){ if(isset($_POST[$custom_meta_field]) && $_POST[$custom_meta_field] != ""){ update_post_meta($post_id, $custom_meta_field, $_POST[$custom_meta_field]); } } } 

Действие save_post вернет идентификатор сохраненного вами сообщения.

Вы также можете проверить разрешения, которые пользователь должен обновить, и убедиться, что задача, такая как Автосохранение, не запущена. Я добавил их ниже.

(Также читайте ответ Bainternet)

 add_action('save_post', 'save_details_booktime'); function save_details_booktime( $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 ) return; // Check permissions if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $id ) ) return; } else { if ( !current_user_can( 'edit_post', $id ) ) return; } $custom_meta_fields = array( 'some_name' ); foreach( $custom_meta_fields as $custom_meta_field ): // Grab the existing meta data (will return an empty string if none) $meta_exists = get_post_meta( $id, $custom_meta_field, true ); // If the meta doesn't match what was $_POST'ed if( $_POST[$custom_meta_field] != $meta_exists && $_POST[$custom_meta_field] != '' ) update_post_meta( $id, $custom_meta_field, $_POST[$custom_meta_field] ); // If the meta does exist, but the new data is blank, delete it if( $meta_exists != '' && $_POST[$custom_meta_field] == '' ) delete_post_meta( $id, $custom_meta_field ); endforeach; } 

Обязательно прочитайте статьи о get_post_meta , update_post_meta , delete_post_meta и save_post для получения дополнительной информации о функциях, используемых выше.