Benutzerdefinierte Meta-Boxen werden nicht gespeichert

Ich versuche, eine benutzerdefinierte Meta-Box mit 12 Feldern zu erstellen. Es gibt 3 Gruppen von 4 Feldern, also verwende ich eine for-Schleife, um sie zu erstellen, um beim Tippen usw. zu sparen.

Aus irgendeinem Grund kann ich sie nicht retten. Ich bin mir nicht sicher, ob meine Codierung korrekt ist. Ich habe überprüft, ob sie gespeichert wurden, indem ich einen var dump von var_dump($linktext[1]); um zu sehen, ob es gespeichert wurde und Null zurückgab.

Dies ist der callback für das Add Metabox, um die Felder im Backend im Metabox auszugeben:

 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 '

Call out box ' . $i .' image 1

'; echo '
'; echo ''; echo ''; echo '
'; echo '

Call out box ' . $i .' image 2

'; echo '
'; echo ''; echo ''; echo '
'; echo '

Call out box ' . $i .' link text

'; echo ''; echo '

Call out box ' . $i .' link

'; echo ''; } }

und das ist meine Speicherfunktion:

 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'); 

Ich glaube, ich habe so lange auf diesen Code gestarrt, ich denke, es könnte ein kleiner Fehler sein, den ich gemacht habe und den ich nicht sehen kann.

Danke fürs Lesen und jede Hilfe wird sehr geschätzt.

Bearbeiten:

Hier ist, was ich von einem vardump von $values['linktext'] bekomme:

string (75) “a: 3: {i: 1; s: 11:” Linktext 1 “; i: 2; s: 11:” Link 2 Text “; i: 3; s: 11:” Link 3 Text “;}”

Ich kann nicht sehen, wie man den zurückgegebenen Wert in die Felder bringt.

Solutions Collecting From Web of "Benutzerdefinierte Meta-Boxen werden nicht gespeichert"

Sie greifen falsch auf das $ _POST-Array zu. Das ist nicht möglich:

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

Der richtige Weg wäre:

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

(Sie haben den gleichen Fehler beim Zugriff auf das Array $values .)

Außerdem sollten Sie der function update_post_meta() das komplette Array geben, anstatt jeden Wert update_post_meta() speichern:

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

* BEARBEITEN *

Mit diesem Code können Sie sehen, ob die Werte korrekt in post_meta gespeichert wurden:

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

Um den $ values-Teil zu korrigieren, müssen Sie alle Vorkommen von:

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

Zu:

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