Пользовательские мета-поля не сохраняются

Я пытаюсь создать пользовательский мета-ящик с 12 полями. Есть 3 группы из 4 полей, поэтому я использую цикл for, чтобы создать их для сохранения при наборе текста и т. Д.

По какой-то причине я не могу заставить их спасти. Я не уверен, правильно ли написано мое кодирование? Я проверил, будут ли они сохранены, выполняя var dump var_dump($linktext[1]); чтобы убедиться, что он был сохранен, и который возвращает null.

Это вызов для добавления метабокса для вывода полей в задней части мета-поля:

 function home_callout_meta_box_cb($post) { global $post; wp_nonce_field('home_callout_nonce', 'home_callout_meta_box_nonce'); $values = get_post_custom($post->ID); for ($i = 1; $i <= 3; $i++) { $imagefield1[$i] = isset($values['imagefields'][$i]) ? esc_attr($values['imagefields'][$i]['image1'][0]): ''; $imagefield2[$i] = isset($values['imagefields'][$i]) ? esc_attr($values['imagefields'][$i]['image2'][0]): ''; $linktext[$i] = isset($values['linktext'][$i]) ? esc_attr($values['linktext'][$i][0]): ''; $link[$i] = isset($values['link'][$i]) ? esc_attr($values['link'][$i][0]): ''; echo '<p><strong>Call out box ' . $i .' image 1</strong></p>'; echo '<div>'; echo '<input type="text" id="imagefields'. [$i] . '[image1]" name="imagefields' . [$i] . '[image1]" class="upload-url image_url" readonly="readonly" value="' . $imagefield1[$i] .'" />'; echo '<input id="st_upload_button" class="st_upload_button button-secondary upload_image" type="button" name="upload_button" value="Upload" />'; echo '</div>'; echo '<p><strong>Call out box ' . $i .' image 2</strong></p>'; echo '<div>'; echo '<input type="text" id="imagefields' . [$i] . '[image2]" name="imagefields' . [$i] . '][image2]" class="upload-url image_url" readonly="readonly" value="' . $imagefield2[$i] .'" />'; echo '<input id="st_upload_button" class="st_upload_button button-secondary upload_image" type="button" name="upload_button" value="Upload" />'; echo '</div>'; echo '<p><strong>Call out box ' . $i .' link text</strong></p>'; echo '<input type="text" id="linktext' . [$i] . '" name="linktext' . [$i] . '" value="' . $linktext[$i] . '" />'; echo '<p><strong>Call out box ' . $i .' link</strong></p>'; echo '<input type="text" id="link' . [$i] . '" name="link' . [$i] . '" value="' . $link[$i] . '" />'; } } 

и это моя функция сохранения:

 function home_callout_save($post_id) { if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return; if(!isset($_POST['home_callout_meta_box_nonce']) || !wp_verify_nonce($_POST['home_callout_meta_box_nonce'], 'home_callout_nonce')) return; if(!current_user_can('edit_pages')) return; if(isset($_POST['imagefields'])) { update_post_meta($post_id, 'imagefields', $_POST['imagefields']); } if(isset($_POST['linktext'])) { update_post_meta($post_id, 'linktext', $_POST['linktext']); } if(isset($_POST['link'])) { update_post_meta($post_id, 'link', $_POST['link']); } } add_action('save_post', 'home_callout_save'); 

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

Спасибо за чтение, и любая помощь очень ценится.

Редактировать:

Вот что я получаю от vardump из $values['linktext'] :

string (75) "a: 3: {i: 1; s: 11:" link text 1 "; i: 2; s: 11:« Текст ссылки 2 »; i: 3; s: 11:« Текст ссылки 3 ";}"

Я не могу понять, как поместить это возвращаемое значение в поля.

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

Вы обращаетесь к массиву $ _POST неправильно. Это невозможно:

 $_POST['imagefields[' . $i . '][image2]'] 

Правильный способ:

 $_POST['imagefields'][$i]['image2']; 

(У вас такая же ошибка при доступе к массиву $values .)

Также вы должны предоставить полный массив функции update_post_meta() вместо сохранения каждого значения отдельно:

  if(isset($_POST['imagefields'])) { update_post_meta($post_id, 'imagefields', $_POST['imagefields']); } 

* EDIT *

Вы можете увидеть, правильно ли значения, сохраненные в post_meta, с использованием этого кода:

 $values = get_post_custom($post->ID); var_dump($values); 

Чтобы исправить часть $ values, вам необходимо изменить все вхождения:

 $values['imagefields[' . $i . '][image1]'] 

Для того, чтобы:

 $values['imagefields'][$i]['image1']