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
)
}
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.
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.