it-swarm.com.de

Was ist der Index [0] für Post-Meta-Felder?

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?

10
Behseini

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()TRUEist, 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.

Ein Beispiel

Angenommen, wir erstellen einen Post-Metaschlüssel mit dem Namen colorund füllen ihn mit drei verschiedenen Werten für one post. Dann machen wir dasselbe mit einem Schlüssel agename__.

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, nicht diesen Metaschlüssel eindeutig zu machen - aber stattdessen mehrere Werte für einen Schlüssel zuzulassen.

Die resultierende Struktur in unserer Tabelle postmetasieht folgendermaßen aus:

table

Jede Zeile hat einen eindeutigen meta_id, aber jeder post_id kann mehrere meta_keys haben, und jeder meta_key kann 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_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.
colorund agesind Arrays wie alle Post-Meta-Werte.
$custom['color'][0] ist bluename__.

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 bluename__. Hinter den Kulissen hat WordPress bereits all benutzerdefinierte Werte abgerufen, sodass ein nächster Treffer für ageaus 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: bluename__.

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.

16
fuxia