Quel est l'index [0] pour les champs post-méta?

10

J'essaie d'améliorer mes connaissances en PHP grâce à des tests et à des essais! Je suis confus sur [0] les 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];

S'agit-il d'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 laissez-moi savoir pourquoi et quand les utiliser?

    
posée Behseini 25.05.2013 - 10:14

1 réponse

16

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

get_post_custom() va chercher toutes les clés méta 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 valeur unique: la première entrée de la méta-valeur post pour la clé donnée.

Le premier appel à get_post_meta() va extraire et mettre en cache toutes les méta-valeurs de cet ID de publication en arrière-plan. Par conséquent, les appels ultérieurs n'entraîneront pas de requêtes supplémentaires dans la base de données.

Un exemple

Supposons que nous créons une méta clé de publication nommée color et la remplissions avec trois valeurs différentes pour la une publication. Ensuite, nous faisons la même chose avec la 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 FALSE indique à WordPress non de rendre cette méta clé unique - mais d'autoriser plusieurs valeurs pour une clé.

La structure résultante dans notre table postmeta ressemblera à ceci:

Chaque ligne a un meta_id unique, mais chaque post_id peut avoir plusieurs meta_key s et chaque meta_key peut avoir plusieurs meta_value s.

Récupérons maintenant toutes les valeurs personnalisées pour la publication 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_last et _edit_lock sont des composants 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.
color et age sont des tableaux comme toutes les valeurs post-méta.
$custom['color'][0] est blue .

Nous récupérons maintenant 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 n’avons ici qu’une partie de nos méta-valeurs. $color[0] est toujours blue . En coulisse, WordPress a déjà récupéré toutes les valeurs personnalisées. Un prochain hit pour age serait alors fourni à partir du cache.
En termes de performances, get_post_custom() et get_post_meta() sont égaux.

Dernière tentative: obtenez la couleur avec get_post_meta() sous forme de 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é de tableau 0 et a renvoyé la valeur sous forme de chaîne.

C’est l’option la plus lisible, utilisez-la pour écrire un code facile à comprendre.

    
réponse donnée fuxia 25.05.2013 - 10:44

Lire d'autres questions sur les étiquettes