Abrufen mehrerer Werte für das Post-Meta (mithilfe eines Arrays)

Ich habe ein Problem beim Abrufen von post_meta-Werten, die ich in einem Array gespeichert habe. Ich benutze dies zum Speichern des Arrays:

add_action( 'comment_post', 'add_food', 1 ); function add_food(){ global $post; $testvalues = array('bread', 'cake'); update_post_meta($post->ID, 'food', $testvalues); } 

und dies zum Abrufen:

 add_filter('the_content', 'print_food'); function print_food($content){ global $post; $custom_fields = get_post_custom($post->ID); $food_field = $custom_fields['food']; $content .= $food_field[0]; return $content; } 

Dies wird jedoch zum Inhalt meiner Seite hinzugefügt:

a: 2: {i: 0; s: 5: “Brot”; i: 1; s: 4: “Kuchen”;}

Die Technik funktioniert gut für die comment_meta. Was mache ich hier falsch?

Solutions Collecting From Web of "Abrufen mehrerer Werte für das Post-Meta (mithilfe eines Arrays)"

Aha! Ich glaube, ich habe deine Antwort gefunden. Zwei Fakten:

  • Die Beschreibung des $ meta_value-Arguments auf den codex- Seitennotizen der add_post_meta () -functionen :

Ein Array wird in eine Zeichenfolge serialisiert.

  • Die Beschreibung des $ single-Arguments in der codex-Seite der get_post_meta () – function :

Wenn diese Option auf “true” gesetzt ist, gibt die function ein einzelnes Ergebnis als Zeichenfolge zurück. Wenn false oder nicht festgelegt ist, gibt die function ein Array der benutzerdefinierten Felder zurück. Das ist nicht intuitiv. Wenn Sie beispielsweise ein serialisiertes Array mit dieser Methode abrufen, soll $ single wahr sein, um ein unserialisiertes Array zurück zu bekommen . Wenn Sie false übergeben oder es auslassen, haben Sie ein Array von eins, und der Wert auf Index 0 wird die serialisierte Zeichenfolge sein. (Betonung hinzugefügt)

Daher sollte dieses [ungetestete] Snippet Ihr Essensarray als ein Array und nicht als serialisierte Zeichenfolge erhalten.

 $food_field = get_post_meta( $post->ID, 'food', true );