get_post_meta für alle Schlüssel bringt Arrays zurück, nicht einzelne Werte

Lesezeit: 2 Minuten

Benutzer-Avatar
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:
Geben Sie hier die Bildbeschreibung ein

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?

Benutzer-Avatar
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);

1159450cookie-checkget_post_meta für alle Schlüssel bringt Arrays zurück, nicht einzelne Werte

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy