web-dev-qa-db-fra.com

Récupération de plusieurs valeurs dans la méta de publication (à l'aide d'un tableau)

Je ne parviens pas à récupérer les valeurs post_meta que j'ai stockées dans un tableau. J'utilise ceci pour stocker le tableau:

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

et ceci pour le récupérer:

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;
}

cependant, ceci est ajouté au contenu de ma page:

a: 2: {i: 0; s: 5: "pain"; i: 1; s: 4: "gâteau";}

La technique fonctionne bien pour le comment_meta. Qu'est-ce que je fais mal ici?

1
maarten

Aha! Je pense avoir trouvé votre réponse. Deux faits:

  • La description de l'argument $ meta_value sur la page de codex des fonctions de add_post_meta () () indique:

Un tableau sera sérialisé dans une chaîne.

  • La description de l'argument $ single dans la page de codex de la fonction get_post_meta () indique:

Si la valeur est true, la fonction renvoie un seul résultat, sous forme de chaîne. Si la valeur est false ou non définie, la fonction renvoie un tableau des champs personnalisés. Ce n'est pas intuitif. Par exemple, si vous extrayez un tableau sérialisé avec cette méthode, vous voulez que $ single soit vrai pour obtenir en réalité un tableau non sérialisé . Si vous transmettez false ou si vous le laissez de côté, vous aurez un tableau de 1 et la valeur à l'index 0 sera la chaîne sérialisée. (emphase ajoutée)

Par conséquent, cet extrait de code [non testé] devrait vous fournir votre tableau de nourriture sous forme de tableau plutôt que de chaîne sérialisée.

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