À quoi sert l'index [0] pour les champs post meta?


10

Essayer d'améliorer mes connaissances PHP à travers le test et essayez! Je suis confus sur [0] arguments à la suite du code PHP WordPress

global $post;
$custom = get_post_custom($post->ID);
$price = $custom['price'][0];
$coMake = $custom['coMake'][0];

echo $custom['price'][0];

Sont-ils destinés à indexer / référencer des entrées sur la page? si oui, pourquoi sont-ils les mêmes?! pouvez-vous s'il vous plaît me faire savoir pourquoi et quand les utiliser?

Réponses:


17

Chaque clé meta post peut avoir plusieurs valeurs. Vous obtenez donc les valeurs par défaut sous forme de tableau; la première entrée ( 0) est la plus ancienne.

get_post_custom()récupère toutes les méta-clés avec leurs valeurs. Vous pouvez simplifier votre code avec:

$price  = get_post_meta( $post->ID, 'price', TRUE );
$comake = get_post_meta( $post->ID, 'coMake', TRUE );

Lorsque le dernier paramètre de get_post_meta()est TRUE, WordPress renverra une seule valeur: la première entrée dans la valeur post meta pour la clé donnée.

Le premier appel à get_post_meta()récupérera et mettra en cache toutes les métadonnées de cet ID de publication en arrière-plan, de sorte que les appels ultérieurs n'entraîneront pas de requêtes de base de données supplémentaires.

Un exemple

Disons que nous créons une méta-clé de publication nommée coloret la remplissons avec trois valeurs différentes pour une publication. Ensuite, nous faisons de même avec une clé 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 );
});

Le dernier paramètre FALSEindique à WordPress de ne pas rendre cette méta-clé unique - mais d'autoriser plusieurs valeurs pour une clé à la place.

La structure résultante dans notre postmetatableau ressemblera à ceci:

table

Chaque ligne a un unique meta_id, mais chacune post_idpeut avoir plusieurs meta_keys et chacune meta_keypeut avoir plusieurs meta_values.

Récupérons maintenant toutes les valeurs personnalisées pour le post 561:

add_action( 'shutdown', function(){

    $custom = get_post_custom( 561 );
    print '<pre>' . esc_html( var_export( $custom, TRUE ) ) . '</pre>';
});

Résultat:

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_lastet _edit_locksont des internes de WordPress, nous l'ignorons pour le moment. Notez simplement que nous obtenons également ces valeurs dans un tableau, bien qu'il n'y ait qu'une seule valeur.
coloret agesont des tableaux comme toutes les valeurs post-méta.
$custom['color'][0]est blue.

Maintenant, nous récupérons juste la couleur avec get_post_meta():

add_action( 'shutdown', function(){

    $color = get_post_meta( 561, 'color' );
    print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
});

Résultat:

array (
  0 => 'blue',
  1 => 'red',
  2 => 'yellow',
)

Nous obtenons ici un seul morceau de nos méta-valeurs. $color[0]est encore blue. Dans les coulisses, WordPress a déjà récupéré toutes les valeurs personnalisées, donc un prochain hit pour ageserait servi à partir du cache.
En termes de performances get_post_custom()et get_post_meta()sont égaux.

Dernière tentative: obtenir la couleur avec get_post_meta()une valeur unique.

add_action( 'shutdown', function(){

    $color = get_post_meta( 561, 'color', TRUE );
    print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
});

Résultat: blue.

WordPress a fait ce que vous avez fait dans votre code: il a pris la clé du tableau 0et renvoyé la valeur sous forme de chaîne.

Il s'agit de l'option la plus lisible, utilisez-la pour écrire du code facile à comprendre.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.