Intereting Posts
Как установить каталог загрузки для каждого типа носителя? Использовать отображаемое имя автора в структуре permalink для страниц и сообщений Как совместно использовать переменные между двумя функциями? Как создать настраиваемый плагин Что такое истинный chmod для WordPress? Измените имя пользователя на ник в разделе комментариев. Перечислите пользовательские таксономические термины, разделяющие должности, с термином из второй пользовательской таксономии Как иметь роль технического писателя на веб-сайте wp Насколько гибкими являются стандарты кодирования WordPress для PHPCS? шаблон пользовательского сообщения игнорируется после изменения постоянных ссылок загрузить jquery в нижний колонтитул не работает Никогда не добавляете действие? Или мне нужно вызвать действие? Не удается получить тест ядра phpunit для работы WordPress Как я могу перечислить сообщения с разными форматами в зависимости от заказа? PHP: отображение знака валюты, если входной номер

Пользовательский метабокс не сохраняет

Я упростил проблему сохранения пользовательских обменов при обновлении и по-прежнему не могу получить поле для сохранения ввода пользовательского поля в базу данных.

Это вызов functions.php во внешний файл /metaboxes/home-meta-new.php :

  // Loading Home Page Meta Box Code from External .php file add_action( 'add_meta_boxes_page','load_home_meta' ); function load_home_meta() { $post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID']; if($post_id == '104'){ include( get_template_directory() . '/metaboxes/home-meta-new.php' ); } } 

Эта часть работает так, как она показывает один мета-ящик из файла home-meta-new.php .

К сожалению, после того, как значения введены для пользовательских полей, а пользователь нажимает на обновление, сообщение обновляется без сохранения значений. Вот код home-meta-new.php :

  <?php /** * Home Page Custom Meta Content * **/ add_meta_box( 'home_meta_box', // $id 'Home Page Content', // $title 'show_home_meta_box', // $callback 'page', // $page 'normal', // $context 'high'); // $priority // Creating Array for Fields $prefix = '_home_'; global $home_meta_fields; $home_meta_fields = array( array( 'label' => 'Caption Title', 'desc' => 'Upper section H2 caption title.', 'id' => $prefix.'title', 'type' => 'text' ), array( 'label' => 'Caption Sub Title', 'desc' => 'Upper section H3 caption title.', 'id' => $prefix.'sub_title', 'type' => 'text' ), array( 'label'=> 'Caption', 'desc' => 'Caption text block.', 'id' => $prefix.'caption', 'type' => 'textarea' ), array( 'label' => 'Caption Image', 'desc' => 'Upload a pre-cropped 1140px wide x 530px tall web-optimized image.', 'id' => $prefix.'image', 'type' => 'image' ) );// end home_meta array //The Callback function show_home_meta_box() { global $home_meta_fields, $post; // Using nonce for verification echo '<input type="hidden" name="home_meta_box_nonce" value="'.wp_create_nonce('home_upper_nonce').'" />'; //wp_nonce_field( 'home_upper_nonce', 'home_upper_nonce' ); //Begin field table and loop echo '<table class="form-table">'; foreach ($home_meta_fields as $field) { // get value of this field if it exists for this page $meta = get_post_meta($post->ID, $field['id'], true); // begin a table row with echo '<tr> <th><label for="'.$field['id'].'">'.$field['label'].'</label></th> <td>'; switch($field['type']) { // case items will go here // text case 'text': echo '<input type="text" name="'.$field['id'].'" id="'.$field['id'].'" value="'.$meta.'" size="30" /> <br /><span class="description">'.$field['desc'].'</span>'; break; // textarea case 'textarea': echo '<textarea name="'.$field['id'].'" id="'.$field['id'].'" cols="60" rows="4">'.$meta.'</textarea> <br /><span class="description">'.$field['desc'].'</span>'; break; case 'image': $image = get_template_directory_uri().'/library/images/img-preview-blank.png'; echo '<span class="custom_default_image" style="display:none">'.$image.'</span>'; if ($meta) { $image = wp_get_attachment_image_src($meta, 'medium'); $image = $image[0]; } echo '<input name="'.$field['id'].'" type="hidden" class="custom_upload_image" value="'.$meta.'" /> <img src="'.$image.'" class="custom_preview_image" style="max-width:300px" alt="" /><br /> <input class="custom_upload_image_button button" type="button" value="Choose Image" /> <small> <a href="#" class="custom_clear_image_button">Remove Image</a></small> <br clear="all" /><span class="description">'.$field['desc'].''; break; } // end switch echo '</td></tr>'; } // end foreach echo '</table>'; // end table }// end build metabox callback // Save the Data function save_home_meta($post_id) { global $home_meta_fields; // verify nonce //option one //if (!wp_verify_nonce($_POST['home_meta_box_nonce'], basename(__FILE__))) //return $post_id; //option two if (isset($_POST['home_meta_box_nonce'])){ if ( !wp_verify_nonce( $_POST['home_meta_box_nonce'], 'home_upper_nonce' ) ) return; }else{return;} // check autosave if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id; // check permissions if ('page' == $_POST['post_type']) { if (!current_user_can('edit_page', $post_id)) return $post_id; } elseif (!current_user_can('edit_post', $post_id)) { return $post_id; } // loop through fields and save the data foreach ($home_meta_fields as $field) { $old = get_post_meta($post_id, $field['id'], true); $new = $_POST[$field['id']]; //if ($new && $new != $old) { if ($new && ($new != $old)) { update_post_meta($post_id, $field['id'], $new); } elseif ('' == $new && $old) { delete_post_meta($post_id, $field['id'], $old); } } // end foreach } add_action('save_post', 'save_home_meta'); // end save_home_meta ?> 

Любой, кто может определить, где он задыхается от сохранения? Благодаря!

Solutions Collecting From Web of "Пользовательский метабокс не сохраняет"

Когда вы это делаете, вы пытаетесь добавить save_post крюк add_meta_boxes_$post_type . Он должен быть независимым.

 add_action( 'add_meta_boxes_page','load_home_meta' ); add_action( 'save_post', 'save_home_meta' ); // Declare all callback functions 

Кроме того, вы не должны объявлять функцию внутри функции. Возможно, вам стоит подумать о создании плагина для его обработки, см.: Где разместить мой код: плагин или functions.php? ,
Или, если вы действительно хотите его внутри functions.php вашей темы, сделайте include для всего этого мета-кода.

Здесь вы найдете множество рабочих примеров, проверьте этот поисковый запрос:
+ save_post + add_meta_box: ответ