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 color
et 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 FALSE
indique à 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 postmeta
tableau ressemblera à ceci:
Chaque ligne a un unique meta_id
, mais chacune post_id
peut avoir plusieurs meta_key
s et chacune meta_key
peut avoir plusieurs meta_value
s.
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_last
et _edit_lock
sont 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.
color
et age
sont 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 age
serait 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 0
et 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.