Para responder a esto, fui y realicé algunas pruebas al respecto, y los resultados fueron realmente alucinantes.
Aqui esta mi prueba
Para esto, prepárese con una página de prueba. Simplemente copie page.php, cámbiele el nombre y elimine el bucle. Ahora solo crea una nueva página en el back-end. Antes de comenzar, primero pruebe su temporizador con información vacía para obtener la cantidad de consultas sin ningún dato
He creado 5 metacampos en total para una publicación de prueba,
enclosure
,
First name
,
Last name
,
packages
y
post_views_count
Mi publicación de prueba tenía una identificación de 530
. Dentro de una publicación, simplemente puede usar $post->ID
o get_the_ID()
configurar la ID de la publicación
Entonces mi primera prueba fue la siguiente:
<?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>
lo que me dio los siguientes resultados
1 consultas en 0.00195 segundos.
Mi segunda prueba fue la siguiente:
<?php
timer_start();
$a = get_post_meta(530);
?>
<p><?php echo get_num_queries(); ?> queries in <?php timer_stop(1, 5); ?> seconds. </p>
que sorprendentemente dio el mismo resultado
1 consultas en 0.00195 segundos.
Si nos fijamos en el código fuente para get_post_meta()
, verá que get_post_meta()
es simplemente un contenedor para get_metadata()
. Así que aquí es donde debes mirar. El código fuente de get_metadata()
, verá que los metadatos se almacenan en caché.
Entonces, en su pregunta sobre cuál usar y sobre el rendimiento, la respuesta será, depende de usted. Has visto la prueba en los resultados
En mi opinión personal, si necesita recuperar 10 campos de metadatos (o en mi caso 5), use el segundo enfoque en mi respuesta.
$a = get_post_meta(530);
No solo es más rápido escribir, sino que tampoco debe repetir el código. Otro punto a tener en cuenta aquí, el segundo enfoque contiene todos los metacampos en una matriz a la que se puede acceder y recuperar fácilmente
Solo como ejemplo, aquí está mi salida de $a
si hago 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"
}
}
Ahora puede acceder a cualquiera de los metadatos devueltos en su publicación de la siguiente manera:
echo $a['First name'][0] . " " . $a['Last name'][0] . "<br>";
Que mostrará
Tom Storm
Puede usar
get_post_meta
para buscar todos los valores de metacampo a la vez.Esto obtendrá todos los meta valores de la publicación dada. Use esa matriz en lugar de buscar individualmente.
fuente
Como dijo Pieter Goosen, todos los metadatos para una publicación se almacenan en caché cuando solicita metadatos por primera vez.
Esto también es cierto para cualquier llamada a
WP_Query
. Tan pronto como llameWP_Query
, WordPress obtiene los metadatos para todas las publicaciones recuperadas en una sola consulta.El peor de los casos es que
get_post_meta
solicite ID de publicaciones individuales que WordPress no haya recuperado antes. En este caso, cada llamada aget_post_meta
dará como resultado una sola consulta.Una traza de muestra desde una consulta hasta
wp_postmeta
dentro deWP_Query
:Como puede ver, la llamada se origina desde dentro
get_posts
y recupera metadatos para 2 publicaciones, que es el resultado del originalWP_Query
.fuente