Ich versuche mein PHP Wissen durch Testen und Ausprobieren zu verbessern! Ich bin verwirrt über [0] Argumente im folgenden WordPress PHP Code
global $post;
$custom = get_post_custom($post->ID);
$price = $custom['price'][0];
$coMake = $custom['coMake'][0];
echo $custom['price'][0];
Dienen sie zum Indizieren/Referenzieren von Eingaben auf der Seite? wenn ja warum sind sie gleich ?! Kannst du mich bitte wissen lassen, warum und wann ich sie verwenden soll?
Jeder Post-Metaschlü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önnten 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()
TRUE
ist, 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 all Meta-Werte für diese Beitrags-ID im Hintergrund abgerufen und zwischengespeichert, sodass spätere Aufrufe nicht zu zusätzlichen Datenbankabfragen führen.
Angenommen, wir erstellen einen Post-Metaschlüssel mit dem Namen color
und füllen ihn mit drei verschiedenen Werten für one post. Dann machen wir dasselbe mit einem Schlüssel age
name__.
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, nicht diesen Metaschlüssel eindeutig zu machen - aber stattdessen mehrere Werte für einen Schlüssel zuzulassen.
Die resultierende Struktur in unserer Tabelle postmeta
sieht folgendermaßen aus:
Jede Zeile hat einen eindeutigen meta_id
, aber jeder post_id
kann mehrere meta_key
s haben, und jeder 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 im 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]
ist blue
name__.
Jetzt holen wir uns mit get_post_meta()
nur die Farbe:
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 bekommen hier nur einen Teil unserer Meta-Werte. $color[0]
ist immer noch blue
name__. Hinter den Kulissen hat WordPress bereits all benutzerdefinierte Werte abgerufen, sodass ein nächster Treffer für age
aus dem Cache bereitgestellt wird.
In Bezug auf die Leistung sind get_post_custom()
und get_post_meta()
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
name__.
WordPress hat das getan, was Sie in Ihrem Code getan haben: Es hat den Array-Schlüssel 0
genommen und den Wert als String zurückgegeben.
Dies ist die am besten lesbare Option. Verwenden Sie sie, um leicht verständlichen Code zu schreiben.