wake-up-neo.com

Abrufen mehrerer Werte in das Post-Meta (mithilfe eines Arrays)

Ich habe ein Problem beim Abrufen von post_meta-Werten, die ich in einem Array gespeichert habe. Ich verwende 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?

1
maarten

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

Ein Array wird in eine Zeichenfolge serialisiert.

  • Die Beschreibung des $ single-Arguments auf der Codex-Seite der Funktion get_post_meta () notes:

Wenn true festgelegt ist, gibt die Funktion ein einzelnes Ergebnis als Zeichenfolge zurück. Wenn false oder nicht festgelegt, gibt die Funktion ein Array der benutzerdefinierten Felder zurück. Das ist nicht intuitiv. Beispiel: Wenn Sie mit dieser Methode ein serialisiertes Array abrufen, möchten Sie, dass $ single true ist, um tatsächlich ein unserialisiertes Array zurückzugewinnen . Wenn Sie false übergeben oder weglassen, haben Sie ein Array von Eins, und der Wert bei Index 0 ist die serialisierte Zeichenfolge. (Betonung hinzugefügt)

Aus diesem Grund sollte dieses [ungetestete] Snippet Ihr Food-Array als Array und nicht als serialisierte Zeichenfolge anzeigen.

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