Speichere gespeicherte Metabox-Werte zurück in Felder und zeige sie dann am Frontend an

Ich habe eine Gruppe Metaboxen, die ich jetzt endlich spare, aber ich kämpfe darum, die gespeicherten Werte wieder in die Eingabefelder zu bekommen, aus denen sie stammen. also zum Beispiel habe ich ein Meta-Feld namens Link-Text und wenn ich ‘Link 1 Text’ dort und speichern, speichere ich es, aber es zeigt nicht zurück in das Formular.

Der Code, den ich dafür verwende, ist:

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]['image1']) ? esc_attr($values['imagefields'][$i]['image1'][0]): ''; $imagefield2[$i] = isset($values['imagefields'][$i]['image2']) ? 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 ''; // var_dump($values['imagefields'][0]); } } 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 kenne die Felder speichern, denn wenn ich einen var_dump ($ Werte [‘linktext’]);

Dies ist das Array, das zurückgegeben wird:

 array(1) { [0]=> string(75) "a:3:{i:1;s:11:"link text 1";i:2;s:11:"Link 2 text";i:3;s:11:"Link 3 text";}" } 

Ich bin mir nicht sicher, wie ich die gespeicherten Werte in jedes Feld zurückbekomme.

die andere kleine Frage, die ich habe, ist, die Werte jeder Metabox auf dem Frontend zu retrieve würde ich verwenden:

 get_post_meta($post_id, 'linktext'][1]', true); 

Danke im Voraus für jede Hilfe.

Solutions Collecting From Web of "Speichere gespeicherte Metabox-Werte zurück in Felder und zeige sie dann am Frontend an"

Sie möchten die Daten aus dem benutzerdefinierten Post-Typ abrufen, einer Variablen zuweisen und diesen Wert beim Laden der Seite in das Feld zurückgeben. Wenn nichts anderes, macht das Ihren Code viel lesbarer (und einfacher zu behandeln). Während es nicht explizit darum geht, was Sie tun, sehen Sie hier die genaue Methode ( WP Stackexchange Post ).

Du findest auch Justin Tadlocks Überprüfung von Metaboxen im Smashing Magazine als aufschlussreiche Lektüre.

Schließlich, wenn Sie Abkürzungen möchten, bietet ein System wie WordPress Alchemy eine gute Code-Bibliothek für Rapid Prototyping und Ausführung, während etwas wie Advanced Custom Fields eine mehr GUI-Ansatz.

So habe ich endlich die Werte in den Feldern erscheinen. Ich bin mir nicht sicher, ob ich es auf eine nette Art mache. aber ich würde gerne einige Kommentare darüber, wie es besser geht, zu schätzen wissen.

Hier ist mein Code:

 function home_callout_meta_box_cb($object, $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]['image1']) ? esc_attr($values['imagefields'][$i]['image1'][0]): ''; $imagefield2[$i] = isset($values['imagefields'][$i]['image2']) ? 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]): ''; $linkText = get_post_meta( $object->ID, 'linktext', true ); $linkUrl = get_post_meta( $object->ID, 'link', true ); $image = get_post_meta( $object->ID, 'imagefields', true ); 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 ''; } }

Was ich getan habe, war, dass ich einige Variablen erstellt habe, um die Metadaten zu retreive, und es gab ein Array zurück, so dass ich $ i verwenden kann, um das richtige zu erhalten und diesen Wert im Feld zu wiederholen.

Ich denke, das ist ein chaotischer Weg, also würde ich mich über einige Kommentare freuen, wie man es besser macht, wenn es einen Weg gibt?