Pour répondre à cela, je suis allé faire quelques tests à ce sujet, et les résultats étaient en fait hallucinants.
Voici mon test
Pour cela vous-même, configurez-vous avec une page de test. Copiez simplement page.php, renommez-le et supprimez la boucle. Maintenant, créez simplement une nouvelle page dans le back-end. Avant de commencer, testez d'abord votre minuteur avec des informations vides pour obtenir le nombre de requêtes sans aucune donnée
J'ai créé 5 champs méta au total pour un poste de test,
enclosure
,
First name
,
Last name
,
packages
et
post_views_count
Mon poste de test avait un ID de 530
. Dans un article, vous pouvez simplement utiliser $post->ID
ou get_the_ID()
pour définir l'ID de l'article
Mon premier test a donc été le suivant:
<?php
timer_start();
$a = get_post_meta(530, 'enclosure', true);
$b = get_post_meta(530, 'First name', true);
$c = get_post_meta(530, 'Last name', true);
$d = get_post_meta(530, 'packages', true);
$e = get_post_meta(530, 'post_views_count', true);
?>
<p><?php echo get_num_queries(); ?> queries in <?php timer_stop(1, 5); ?> seconds. </p>
ce qui m'a donné les résultats suivants
1 requêtes en 0.00195 secondes.
Mon deuxième test était le suivant:
<?php
timer_start();
$a = get_post_meta(530);
?>
<p><?php echo get_num_queries(); ?> queries in <?php timer_stop(1, 5); ?> seconds. </p>
qui, étonnamment, a donné le même résultat
1 requêtes en 0.00195 secondes.
Si vous regardez le code source de get_post_meta()
, vous verrez que get_post_meta()
c'est simplement un wrapper pour get_metadata()
. C'est donc là que vous devez regarder. Le code source de get_metadata()
, vous verrez que les métadonnées sont mises en cache.
Donc, pour votre question sur l'utilisation et les performances, la réponse sera, c'est à vous de décider. Vous en avez vu la preuve dans les résultats
À mon avis, si vous avez besoin de récupérer 10 champs de métadonnées (ou dans mon cas 5), utilisez la deuxième approche dans ma réponse.
$a = get_post_meta(530);
Il est non seulement plus rapide à écrire, mais vous ne devez pas non plus répéter le code. Un autre point à noter ici, la deuxième approche contient tous les méta-champs dans un tableau qui peut être très facilement accessible et récupéré
Juste à titre d'exemple, voici ma sortie de $a
si je fais unvar_dump( $a );
array(9) {
["_edit_lock"]=>
array(1) {
[0]=>
string(12) "1414838328:1"
}
["_edit_last"]=>
array(1) {
[0]=>
string(1) "1"
}
["_custom_sidebar_per_page"]=>
array(1) {
[0]=>
string(7) "default"
}
["post_views_count"]=>
array(1) {
[0]=>
string(1) "0"
}
["packages"]=>
array(1) {
[0]=>
string(1) "0"
}
["repeatable_names"]=>
array(1) {
[0]=>
string(79) "a:1:{i:0;a:3:{s:4:"role";s:4:"fool";s:4:"name";s:6:"Pieter";s:3:"url";s:0:"";}}"
}
["enclosure"]=>
array(1) {
[0]=>
string(105) "http://localhost/wordpress/wp-content/uploads/2014/09/Nissan-Navara-Tough-City.avi
13218974
video/avi
"
}
["First name"]=>
array(1) {
[0]=>
string(3) "Tom"
}
["Last name"]=>
array(1) {
[0]=>
string(5) "Storm"
}
}
Vous pouvez maintenant accéder à n'importe laquelle des métadonnées renvoyées dans votre message comme suit:
echo $a['First name'][0] . " " . $a['Last name'][0] . "<br>";
Qui affichera
Tom Storm
Vous pouvez utiliser
get_post_meta
pour récupérer toutes les valeurs de méta-champ à la fois.Cela récupérera toutes les méta-valeurs de la publication donnée. Utilisez ce tableau au lieu de récupérer individuellement.
la source
Comme l'a déclaré Pieter Goosen, toutes les métadonnées d'une publication sont mises en cache lorsque vous demandez des métadonnées pour la première fois.
Cela est également vrai pour tous les appels à
WP_Query
. Dès que vous appelezWP_Query
, WordPress récupère les métadonnées de tous les articles récupérés dans une seule requête.Le pire des cas est que vous appeliez
get_post_meta
des ID de publication individuels qui n'ont pas été récupérés par WordPress auparavant. Dans ce cas, chaque appel àget_post_meta
entraînera une seule requête.Un exemple de trace d'une requête à l'
wp_postmeta
intérieur d'unWP_Query
:Comme vous pouvez le voir, l'appel provient de l'intérieur
get_posts
et récupère les métadonnées de 2 publications, qui sont le résultat de l'originalWP_Query
.la source