web-dev-qa-db-fra.com

Pourquoi get_post_meta renvoie-t-il un tableau lorsque je le spécifie comme étant unique?

Le documentation from get_post_meta donne l’impression que l’argument single déterminera si les méta-valeurs sont ou non renvoyées dans un tableau. Par exemple:

// If I set single to false, or leave it blank it's returned as an array
[my-meta] => Array
    (
        [0] => my-value
    )

// If I set single to true, it's returned as a string
[my-meta] = my-value

Cela fonctionne bien si je ne renvoie que des données pour une seule clé méta ... mais échoue si je souhaite renvoyer toutes les métadonnées, mais les renvoie toutes sous forme de chaînes (single).

Il semblerait que l'appel approprié pour obtenir toutes les méta-valeurs avec des valeurs de chaîne serait:

$meta = get_post_meta( $transaction->ID, false, true );

Mais cela retourne avec les valeurs du tableau et ignore complètement la valeur single.

Pourquoi? Existe-t-il un moyen d'obtenir toutes les métadonnées, mais sans les tableaux à un seul élément? Celles-ci sont inutiles dans mon cas.

EDIT: Juste pour clarifier ce que je demande, je mentirais pour obtenir tous les méta comme ceci:

array() {
    [my-meta-1] = my-value
    [my-meta-2] = my-value
    [my-meta-3] = my-value
    [my-meta-4] = my-value
}

Plutôt que comme ceci (qui est le seul comportement que je semble être capable d’obtenir):

array() {
    [my-meta-1] => Array
    (
        [0] => my-value
    )
    [my-meta-2] => Array
    (
        [0] => my-value
    )
    [my-meta-3] => Array
    (
        [0] => my-value
    )
    [my-meta-4] => Array
    (
        [0] => my-value
    )
}
2
Pete

Cela fonctionne bien si je ne renvoie que des données pour une seule clé méta ... mais échoue si je souhaite renvoyer toutes les métadonnées, mais les renvoie toutes sous forme de chaînes (single).

Cela n'a pas beaucoup de sens. Une fonction dans PHP ne peut renvoyer qu'une seule valeur. Il est donc impossible de renvoyer all meta sous la forme strings (pluriel). Il doit sortir comme un tableau ou un objet. Et c'est ce que fait la fonction: vous obtenez une valeur unique sous forme de chaîne ou un tableau. Si vous ne spécifiez pas de clé, le code n'a aucun moyen de savoir quelle clé vous voulez, vous les obtiendrez toutes, par défaut pas single. Lorsque vous ne récupérez pas de valeurs uniques, WordPress ne réduit pas le tableau imbriqué. Si c'est ce que vous voulez, discutez-en avec les développeurs Core sur Trac. En attendant, réduisez vous-même le tableau:

$meta = get_post_meta(350);
var_dump($meta);
foreach ($meta as $k => $v) {
  $meta[$k] = array_shift($v);
}

Ou:

foreach ($meta as &$v) {
  $v = array_shift($v);
}

Il ne peut pas parier qu'il réponde à vos attentes, mais je suis à peu près sûr que cela est exact. Il pourrait y avoir un filtre, mais je doute que l'effort en vaille la peine.

4
s_ha_dum

Une petite fonction courte, peut-être:

function get_post_meta_single( $id ) {
  $m = get_post_meta( $id, false, true );    // get post meta as singles
  foreach( $m as &$v ) $v = array_shift($v); // collapse value array
  return $m;
}

En passant, il est probable que la raison pour laquelle WordPress ne réduise pas le tableau est de maintenir la cohérence, afin que le même code puisse être réutilisé pour les éléments comportant plusieurs valeurs et des valeurs uniques. WordPress est tout au sujet de la boucle, rappelez-vous.

2
Armstrongest