get_post_meta für alle Schlüssel bringt Arrays zurück, nicht einzelne Werte
Lesezeit: 2 Minuten
Steve
$meta = get_post_meta($post_id,'',true);
bringt alle Metawerte für $post_id zurück, aber es gibt ein Array für jeden Wert zurück, wie unten gezeigt:
Ich könnte dies erwarten, wenn ich den dritten Parameter – single – auf false gesetzt hätte, aber er ist auf true gesetzt. Ich habe nichts im Kodex gefunden, das darüber spricht, was genau zurückgegeben wird, wenn der Schlüssel leer ist.
Hat jemand hier Informationen und weiß, wie ich alle Schlüssel zurückbekommen kann, wobei jeder Schlüsselwert ein einzelner Wert anstelle eines Arrays von Werten ist?
random_user_name
Die Antwort lautet: Dies ist beabsichtigt, scheint aber im Codex nicht dokumentiert zu sein.
Wenn Sie sich die wahre Dokumentation (den Quellcode) ansehen, werden Sie das sehen get_post_meta Anrufe get_metadata. Durch die Überprüfung des Codes von get_metadatawir können das sehen, wenn die $meta_key nicht gepostet wird, gibt es den Wert zurück, bevor es if auswertet $single gesetzt ist oder nicht:
// Previously, $meta_cache is set to the contents of the post meta data
// Here you see if there is no key set, it just returns it all
if ( ! $meta_key ) {
return $meta_cache;
}
// It's not until later than $single becomes a factor
if ( isset($meta_cache[$meta_key]) ) {
if ( $single )
return maybe_unserialize( $meta_cache[$meta_key][0] );
else
return array_map('maybe_unserialize', $meta_cache[$meta_key]);
}
Wenn Sie PHP 5.3+ verwenden, können Sie mit so etwas bekommen, was Sie wollen:
// Get the meta values
$meta = get_post_meta($post_id,'',true);
// Now convert them to singles
$meta = array_map(function($n) {return $n[0];}, $meta);
Oder, wenn Sie wirklich schick werden wollen, können Sie Ihren eigenen “Wrapper” um die get_post_meta-Funktion schreiben, wie folgt:
function get_all_post_meta($post_id) {
// Get the meta values
$meta = get_post_meta($post_id,'');
// Now convert them to singles and return them
return array_map(function($n) {return $n[0];}, $meta);
}
Was Sie dann so verwenden könnten:
$meta = get_all_post_meta($post_id);
Oder, wenn Sie PHP 5.3+ nicht verwenden (sollten Sie!), könnten Sie es so machen:
function get_all_post_meta($post_id) {
// Get the meta values
$meta = get_post_meta($post_id,'');
foreach($meta AS $key => $value) {
$meta[$key] = $value[0];
}
return $meta;
}
Ich denke, es gibt keine Möglichkeit, einen einzelnen Wert in get_post_meta zu erhalten, wenn $single wahr ist. Sie schreiben also eine benutzerdefinierte Funktion, um sie zu erhalten.
Verwenden
//callback to get single value in get_meta_data
function get_single_value($val) {
return $val[0];
}
$meta = get_post_meta($post_id,'', true);
$meta1 = array_map('get_postmeta_single_value', $meta);
print_r($meta1);
11594500cookie-checkget_post_meta für alle Schlüssel bringt Arrays zurück, nicht einzelne Werteyes