Jeder Post-Meta-Schlüssel kann mehrere Werte haben. Sie erhalten die Werte also standardmäßig als Array. Der erste Eintrag ( 0) ist der älteste.
get_post_custom()Ruft alle Metaschlüssel mit ihren Werten ab. Sie können Ihren Code vereinfachen mit:
$price = get_post_meta( $post->ID, 'price', TRUE );
$comake = get_post_meta( $post->ID, 'coMake', TRUE );
Wenn der letzte Parameter für get_post_meta()ist TRUE, gibt WordPress einen einzelnen Wert zurück: den ersten Eintrag im Post-Meta-Wert für den angegebenen Schlüssel.
Beim ersten Aufruf von get_post_meta()werden alle Metawerte für diese Post-ID im Hintergrund abgerufen und zwischengespeichert , sodass spätere Aufrufe nicht zu zusätzlichen Datenbankabfragen führen.
Ein Beispiel
Angenommen, wir erstellen einen Post-Meta-Schlüssel mit dem Namen colorund füllen ihn mit drei verschiedenen Werten für einen Post. Dann machen wir dasselbe mit einem Schlüssel age.
add_action( 'wp_loaded', function() {
foreach ( array ( 'blue', 'red', 'yellow' ) as $color )
add_post_meta( 561, 'color', $color, FALSE );
foreach ( array ( '14', '40', '104' ) as $age )
add_post_meta( 561, 'age', $age, FALSE );
});
Der letzte Parameter FALSEweist WordPress an, diesen Metaschlüssel nicht eindeutig zu machen, sondern stattdessen mehrere Werte für einen Schlüssel zuzulassen.
Die resultierende Struktur in unserer postmetaTabelle sieht folgendermaßen aus:

Jede Zeile hat ein eindeutiges meta_id, aber jede post_idkann mehrere meta_keys haben, und jede meta_keykann mehrere meta_values haben.
Rufen wir nun alle benutzerdefinierten Werte für Post 561 ab:
add_action( 'shutdown', function(){
$custom = get_post_custom( 561 );
print '<pre>' . esc_html( var_export( $custom, TRUE ) ) . '</pre>';
});
Ergebnis:
array (
'_edit_last' =>
array (
0 => '1',
),
'_edit_lock' =>
array (
0 => '1367617428:1',
),
'color' =>
array (
0 => 'blue',
1 => 'red',
2 => 'yellow',
),
'age' =>
array (
0 => '14',
1 => '40',
2 => '104',
),
)
_edit_lastund _edit_locksind WordPress-Interna, wir ignorieren das für den Moment. Beachten Sie nur, dass wir diese Werte auch als Array erhalten, obwohl es nur einen Wert gibt.
colorund agesind Arrays wie alle Post-Meta-Werte.
$custom['color'][0]istblue .
Jetzt holen wir nur die Farbe mit get_post_meta():
add_action( 'shutdown', function(){
$color = get_post_meta( 561, 'color' );
print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
});
Ergebnis:
array (
0 => 'blue',
1 => 'red',
2 => 'yellow',
)
Wir erhalten hier nur einen Teil unserer Metawerte. $color[0]ist immer noch blue. Hinter den Kulissen hat WordPress bereits alle benutzerdefinierten Werte abgerufen , sodass ein nächster Treffer für ageaus dem Cache bereitgestellt wird.
In Bezug auf die Leistung get_post_custom()und get_post_meta()sind gleich.
Letzter Versuch: Holen Sie sich die Farbe mit get_post_meta()als Einzelwert.
add_action( 'shutdown', function(){
$color = get_post_meta( 561, 'color', TRUE );
print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
});
Ergebnis : blue.
WordPress hat getan, was Sie in Ihrem Code getan haben: Es hat den Array-Schlüssel genommen 0 und den Wert als Zeichenfolge zurückgegeben.
Dies ist die am besten lesbare Option. Verwenden Sie sie, um leicht verständlichen Code zu schreiben.