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 color
und 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 FALSE
weist WordPress an, diesen Metaschlüssel nicht eindeutig zu machen, sondern stattdessen mehrere Werte für einen Schlüssel zuzulassen.
Die resultierende Struktur in unserer postmeta
Tabelle sieht folgendermaßen aus:
Jede Zeile hat ein eindeutiges meta_id
, aber jede post_id
kann mehrere meta_key
s haben, und jede meta_key
kann mehrere meta_value
s 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_last
und _edit_lock
sind 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.
color
und age
sind 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 age
aus 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.