{"id":30942,"date":"2020-01-31T02:12:14","date_gmt":"2020-01-31T10:12:14","guid":{"rendered":"https:\/\/kinsta.com\/?p=5453"},"modified":"2025-02-18T10:52:04","modified_gmt":"2025-02-18T09:52:04","slug":"wp-query","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/wp-query\/","title":{"rendered":"Construyendo consultas eficientes de WordPress con WP_Query"},"content":{"rendered":"<p>Como desarrolladores de WordPress, a menudo necesitamos recuperar publicaciones, p\u00e1ginas y otros contenidos que coinciden con criterios espec\u00edficos de la <a href=\"https:\/\/kinsta.com\/es\/blog\/base-de-datos-wordpress\/\">base de datos de WordPress<\/a>. Por lo general, no necesitamos construir consultas SQL (y a menudo no deber\u00edamos) porque la clase <code>WP_Query<\/code> y sus m\u00e9todos nos proporcionan una forma segura y eficiente de recuperar datos de la base de datos. S\u00f3lo tenemos que declarar una serie de argumentos, y el objeto <code>$query<\/code> construir\u00e1 la consulta SQL real.<\/p>\n<p>En este post, asumo que ya conoce los fundamentos de la clase <code><a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Query\">WP_Query<\/a><\/code>, sus <a href=\"https:\/\/codex.wordpress.org\/Query_Overview\">m\u00e9todos y propiedades<\/a>, y donde encontrar una lista de las <a href=\"https:\/\/codex.wordpress.org\/WordPress_Query_Vars\">variables disponibles<\/a>.<\/p>\n<p>Me centrar\u00e9 en los par\u00e1metros proporcionados por la clase <code>WP_Query<\/code> espec\u00edficamente para optimizar las consultas SQL, reduciendo el tiempo de ejecuci\u00f3n y el consumo de recursos.<\/p>\n<p>Cuando el tr\u00e1fico y el contenido son limitados, normalmente no nos preocupamos por la eficiencia de nuestras consultas. WordPress construye consultas SQL bien optimizadas y proporciona un sistema de almacenamiento en memoria cach\u00e9 fuera de la caja.<\/p>\n<p>Cuando el tr\u00e1fico y el contenido del sitio crecen significativamente &#8211; hasta miles de posts &#8211; entonces debemos considerar el tiempo de ejecuci\u00f3n de la consulta.<\/p>\n<ul>\n<li><a href=\"#toolbox\">Nuestra caja de herramientas<\/a><\/li>\n<li><a href=\"#wp-query\">WP_Query &#8211; Por qu\u00e9 no contamos las filas<\/a><\/li>\n<li><a href=\"#cache-or-not-cache\">Cach\u00e9 o no cach\u00e9<\/a><\/li>\n<li><a href=\"#returned-fields\">Campos devueltos<\/a><\/li>\n<\/ul>\n<h2 id=\"toolbox\">Nuestra caja de herramientas<\/h2>\n<p>El c\u00f3digo que les voy a mostrar ha sido probado con <a href=\"https:\/\/kinsta.com\/es\/blog\/query-monitor\/\">Query Monitor<\/a>, un plugin gratuito que proporciona informaci\u00f3n esencial sobre el rendimiento de las consultas, los ganchos activados, las solicitudes HTTP, las reglas de reescritura y mucho m\u00e1s.<\/p>\n<p>Como alternativa a un plugin, podemos forzar a WordPress a que almacene la informaci\u00f3n de la consulta declarando la siguiente constante en <em>wp-config.php<\/em>:<\/p>\n<pre>define( 'SAVEQUERIES', true );<\/pre>\n<p>Cuando <code>SAVEQUERIES<\/code> se establece como <code>true<\/code>, WordPress registra las consultas y un mont\u00f3n de informaci\u00f3n \u00fatil en la matriz <code>$wpdb-&gt;queries<\/code>. As\u00ed, los nombres de las funciones de llamada y el lapso de ejecuci\u00f3n de cada consulta pueden imprimirse a\u00f1adiendo el siguiente c\u00f3digo en un archivo de plantilla como <em>el footer.php<\/em>:<\/p>\n<pre>if ( current_user_can( 'administrator' ) ) {\n\tglobal $wpdb;\n\techo '&lt;pre&gt;';\n\tprint_r( $wpdb-&gt;queries );\n\techo '&lt;\/pre&gt;';\n}<\/pre>\n<p>Aqu\u00ed hay un ejemplo de lo que se repite:<\/p>\n<pre>[4] =&gt; Array\n(\n\t[0] =&gt; SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')  ORDER BY wp_posts.post_date DESC LIMIT 0, 10\n\t[1] =&gt; 0.0163011550903\n\t[2] =&gt; require('wp-blog-header.php'), wp, WP-&gt;main, WP-&gt;query_posts, WP_Query-&gt;query, WP_Query-&gt;get_posts, QM_DB-&gt;query\n\t[trace] =&gt; QM_Backtrace Object\n\t\t( ... )\n\t[result] =&gt; 10\n)\n<\/pre>\n<p>Si quiere profundizarse en este tema, eche un vistazo a nuestro tutorial: <a href=\"https:\/\/kinsta.com\/es\/blog\/wp-config-php\/\">Editando wp-config.php<\/a>.<br \/>\nPor \u00faltimo, considere que tanto el plugin como la funcionalidad incorporada de <code>SAVEQUERIES<\/code> est\u00e1n desarrollando herramientas que deber\u00edamos desconectar en un entorno de producci\u00f3n.<\/p>\n<p>Dicho esto, veamos c\u00f3mo acelerar las consultas de WordPress.<\/p>\n<h2 id=\"wp-query\">WP_Query &#8211; \u00bfPor qu\u00e9 no contamos las filas?<\/h2>\n<p>Podemos consultar la base de datos con la funci\u00f3n <code>get_posts<\/code>, que devuelve un array de posts, o una nueva instancia del objeto <code>WP_Query<\/code>. En ambos casos podemos determinar los resultados de las consultas fijando valores adecuados a variables espec\u00edficas.<\/p>\n<p>Comencemos con un ejemplo que muestra un bucle com\u00fan como suele aparecer en un archivo de plantilla:<\/p>\n<pre>\/\/ The Query\n$the_query = new WP_Query( $args );\n\/\/ The Loop\nif ( $the_query-&gt;have_posts() ) {\n\twhile ( $the_query-&gt;have_posts() ) : $the_query-&gt;the_post(); \n\t\t\/\/ Your code here\n\tendwhile;\n} else {\n\t\t\/\/ no posts found\n}\n\/* Restore original Post Data *\/\nwp_reset_postdata();\n<\/pre>\n<p><code>$args<\/code> es un conjunto de pares clave\/valor. Estos pares se denominan vars de consulta, y determinan o afectan a la consulta SQL real.<\/p>\n<p>Al consultar la base de datos desde un plugin, es posible que prefiramos utilizar el filtro <code>pre_get_posts<\/code>, como se muestra en el siguiente ejemplo:<\/p>\n<pre>function myplugin_pre_get_posts( $query ) {\n  if ( is_admin() || ! $query-&gt;is_main_query() ){\n\treturn;\n  }\n  $query-&gt;set( 'category_name', 'webdev' );\n}\nadd_action( 'pre_get_posts', 'myplugin_pre_get_posts', 1 );\n<\/pre>\n<p>Una cosa importante a notar aqu\u00ed es que el objeto <code>$query<\/code> se pasa por referencia, no por valor, lo que significa que los argumentos de la consulta s\u00f3lo afectan a una instancia <code>$query<\/code> existente.<\/p>\n<p>El m\u00e9todo del <code>set<\/code> a\u00f1ade una nueva varilla de consulta a la especificaci\u00f3n de la consulta y obligar\u00e1 a WordPress a recuperar todos los mensajes de la categor\u00eda <code>webdev<\/code>. Esta es la consulta resultante:<\/p>\n<pre>SELECT SQL_CALC_FOUND_ROWS wp_posts.ID\nFROM wp_posts \nINNER JOIN wp_term_relationships\nON (wp_posts.ID = wp_term_relationships.object_id)\nWHERE 1=1 \nAND ( wp_term_relationships.term_taxonomy_id IN (12) )\nAND wp_posts.post_type = 'post'\nAND (wp_posts.post_status = 'publish'\nOR wp_posts.post_status = 'private')\nGROUP BY wp_posts.ID\nORDER BY wp_posts.post_date DESC\nLIMIT 0, 10\n<\/pre>\n<p>En este ejemplo, el valor <code>LIMIT<\/code> ha sido establecido por el usuario administrador en las opciones de lectura, como se muestra en la siguiente imagen.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2016\/06\/reading_settings.png\" alt=\"Reading Settings\" width=\"472\" height=\"299\"><\/p>\n<p>En las consultas personalizadas podemos establecer el n\u00famero de filas a recuperar de la base de datos gracias al par\u00e1metro de <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Query#Pagination_Parameters\">paginaci\u00f3n<\/a> <code>posts_per_page<\/code>.<\/p>\n<p>La opci\u00f3n <code>SQL_CALC_FOUND_ROWS<\/code> obliga a la consulta a contar el n\u00famero de filas encontradas. Este n\u00famero ser\u00e1 devuelto por la funci\u00f3n<code> FOUND_ROWS()<\/code> SQL, como se muestra en el siguiente ejemplo:<\/p>\n<pre>SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name\nWHERE id &gt; 100 LIMIT 10;\n\nSELECT FOUND_ROWS();\n<\/pre>\n<p>Desafortunadamente, <code>SQL_CALC_FOUND_ROWS<\/code> puede ralentizar significativamente el tiempo de ejecuci\u00f3n de la consulta.<br \/>\nLa buena noticia es que podemos forzar a WordPress a eliminar la opci\u00f3n que proporciona la variable <code>no_found_rows<\/code> infrautilizada\u00a0(y no documentada).<\/p>\n<p>Si se omite <code>SQL_CALC_FOUND_ROWS<\/code>, <code>FOUND_ROWS()<\/code> devuelve el n\u00famero de filas hasta el valor de <code>LIMIT<\/code> (m\u00e1s sobre este tema en la documentaci\u00f3n de <a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.7\/en\/information-functions.html#function_found-rows\">MySQL<\/a>).<\/p>\n<p>En una instalaci\u00f3n de WordPress con unos pocos cientos de posts, la siguiente meta consulta tom\u00f3 0.0107 segundos:<\/p>\n<pre>SELECT SQL_CALC_FOUND_ROWS wp_posts.ID\nFROM wp_posts \nINNER JOIN wp_postmeta\nON ( wp_posts.ID = wp_postmeta.post_id )\nWHERE 1=1 \nAND ( ( wp_postmeta.meta_key = 'book_author'\nAND CAST(wp_postmeta.meta_value AS CHAR) LIKE '%Isaac Asimov%' ) )\nAND wp_posts.post_type = 'book'\nAND (wp_posts.post_status = 'publish'\nOR wp_posts.post_status = 'private')\nGROUP BY wp_posts.ID\nORDER BY wp_posts.post_date DESC\nLIMIT 0, 10\n<\/pre>\n<p>Eliminando <code>SQL_CALC_FOUND_ROWS<\/code> poniendo <code>no_found_rows<\/code> en false, la misma consulta tom\u00f3 0.0006 segundos.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full \" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2016\/06\/queries.png\" alt=\"Thanks to Query Monitor plugin, we can easily compare two queries enabling and disabling SQL_CALC_FOUND_ROWS option\" width=\"800\" height=\"348\"><\/p>\n<p>Gracias al plugin Query Monitor, podemos comparar f\u00e1cilmente dos consultas con y sin la opci\u00f3n SQL_CALC_FOUND_ROWS<\/p>\n<p>Cuando la tabla <code>wp_post<\/code> contiene miles de filas, la ejecuci\u00f3n de la consulta podr\u00eda tardar segundos.<br \/>\n<strong>Cuando no necesitemos paginaci\u00f3n, deber\u00edamos poner las filas de <code>no_found_rows<\/code><\/strong><strong>\u00a0en <\/strong><code><strong>true<\/strong><\/code><strong>, haciendo que la consulta se ejecute dram\u00e1ticamente m\u00e1s r\u00e1pido.<\/strong><\/p>\n<h2 id=\"cache-or-not-cache\">Cach\u00e9 o no cach\u00e9<\/h2>\n<p>WordPress proporciona un sistema de almacenamiento en cach\u00e9 incorporado desde la caja. Aunque el almacenamiento en cach\u00e9 generalmente mejora la velocidad de carga de la p\u00e1gina, puede hacer que se ejecuten algunas consultas adicionales contra la base de datos. Adem\u00e1s, cada vez que se ejecuta una consulta se podr\u00eda solicitar un mont\u00f3n de datos innecesarios.<\/p>\n<p>Afortunadamente, WordPress nos permite deshabilitar el cacheo con tres <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Query#Caching_Parameters\">par\u00e1metros espec\u00edficos<\/a>:<\/p>\n<ul>\n<li><strong>resultados de la cach\u00e9<\/strong>: Si se debe almacenar la informaci\u00f3n del correo. Por defecto es cierto.<\/li>\n<li><strong>update_post_meta_cache<\/strong>: Si actualizar el post meta cache. Por defecto es cierto.<\/li>\n<li><strong>update_post_term_cache<\/strong>: Si actualizar el cach\u00e9 post t\u00e9rmino. Por defecto es cierto.<\/li>\n<\/ul>\n<p>Si se activa un sistema de cacheo persistente, como <a href=\"https:\/\/memcached.org\/\">Memcached<\/a>, no tenemos que preocuparnos por los par\u00e1metros de cacheo porque WordPress establecer\u00e1 estos argumentos falsos por defecto.<\/p>\n<p>En cualquier otra situaci\u00f3n, podemos construir una consulta m\u00e1s r\u00e1pida con el siguiente c\u00f3digo:<\/p>\n<pre>function myplugin_pre_get_posts( $query ) {\n  if ( is_admin() || ! $query-&gt;is_main_query() ){\n\treturn;\n  }\n  $query-&gt;set( 'category_name', 'webdev' );\n\n  $query-&gt;set( 'no_found_rows', true );\n  $query-&gt;set( 'update_post_meta_cache', false );\n  $query-&gt;set( 'update_post_term_cache', false );\n}\nadd_action( 'pre_get_posts', 'myplugin_pre_get_posts', 1 );\n<\/pre>\n<p><strong>Cuando no se dispone de un sistema de almacenamiento permanente, las consultas que devuelvan peque\u00f1as cantidades de datos no deben almacenarse en la memoria intermedia.<\/strong><\/p>\n<h2 id=\"returned-fields\">Campos devueltos<\/h2>\n<p>Como regla general, nunca debemos consultar la base de datos por campos innecesarios. La clase <code>WP_Query<\/code> proporciona el argumento fields, que permite limitar los campos devueltos a los campos ID o <code>'id=&gt;parent'<\/code>. La <a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/4.5.2\/src\/wp-includes\/query.php#L1494\">documentaci\u00f3n del archivo<\/a> fuente define el argumento de los campos de la siguiente manera:<\/p>\n<blockquote><p>Qu\u00e9 campos devolver. Un solo campo o todos los campos (cadena), o una serie de campos. &#8216;id=&gt;parent&#8217; usa &#8216;id&#8217; y &#8216;post_parent&#8217;. Por defecto todos los campos. Acepta &#8216;ids&#8217;, &#8216;id=&gt;parent&#8217;.<\/p><\/blockquote>\n<p>La variable de campos admite <code>'ids'<\/code> y <code>'id=&gt;parent'<\/code>, y su valor predeterminado es * (cualquier otro valor), aunque notar\u00e1s que, de forma predeterminada, WordPress establecer\u00e1 el valor a ids en varias consultas.<\/p>\n<p>Finalmente, podemos optimizar nuestra primera consulta:<\/p>\n<pre>&lt;?php\n$args = array( \n\t'no_found_rows' =&gt; true, \n\t'update_post_meta_cache' =&gt; false, \n\t'update_post_term_cache' =&gt; false, \n\t'category_name' =&gt; 'cms', \n\t'fields' =&gt; 'ids'\n);\n\/\/ The Query\n$the_query = new WP_Query( $args );\n$my_posts = $the_query-&gt;get_posts();\n\nif( ! empty( $my_posts ) ){\n    foreach ( $my_posts as $p ){\n        \/\/ Your code\n    }\n}\n\/* Restore original Post Data *\/\nwp_reset_postdata();\n?&gt;\n<\/pre>\n<p><strong>Cuando no se requieran campos espec\u00edficos, limite los campos devueltos a las identificaciones.<\/strong><\/p>\n<h2>Resumen<\/h2>\n<p>Teniendo en cuenta que la velocidad de consulta puede no traer grandes ventajas para los peque\u00f1os sitios web con unos pocos cientos de mensajes. Si quiere prepararse para el crecimiento o tiene un gran sitio web con consultas costosas, deber\u00eda optimizar sus consultas de WordPress. Las consultas ineficaces pueden ralentizar dram\u00e1ticamente la carga de las p\u00e1ginas, pero con unos pocos y sencillos ajustes se puede acelerar considerablemente el sitio web.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>When traffic and content are limited, we don&#8217;t care about query speed. But when site content grows up to thousands of posts, we must consider the query execution time. In this post I will focus on those parameters provided by the WP_Query class specifically to optimize the SQL queries, reducing execution time and resource consumption.<\/p>\n","protected":false},"author":36,"featured_media":5962,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[414,172],"topic":[1345],"class_list":["post-30942","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-webdev","tag-wordpress","topic-desarrollo-wordpress"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Construyendo consultas eficientes de WordPress con WP_Query<\/title>\n<meta name=\"description\" content=\"En este tutorial, le mostraremos c\u00f3mo utilizar la clase WP_Query espec\u00edficamente para optimizar las consultas SQL, reduciendo el tiempo de ejecuci\u00f3n y el consumo de recursos.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/es\/blog\/wp-query\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Construyendo consultas eficientes de WordPress con WP_Query\" \/>\n<meta property=\"og:description\" content=\"En este tutorial, le mostraremos c\u00f3mo utilizar la clase WP_Query espec\u00edficamente para optimizar las consultas SQL, reduciendo el tiempo de ejecuci\u00f3n y el consumo de recursos.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/wp-query\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-31T10:12:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-18T09:52:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2016\/07\/wp_query.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"998\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Carlo Daniele\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"En este tutorial, le mostraremos c\u00f3mo utilizar la clase WP_Query espec\u00edficamente para optimizar las consultas SQL, reduciendo el tiempo de ejecuci\u00f3n y el consumo de recursos.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2016\/07\/wp_query.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@carlodaniele\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carlo Daniele\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/wp-query\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/wp-query\/\"},\"author\":{\"name\":\"Carlo Daniele\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63\"},\"headline\":\"Construyendo consultas eficientes de WordPress con WP_Query\",\"datePublished\":\"2020-01-31T10:12:14+00:00\",\"dateModified\":\"2025-02-18T09:52:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/wp-query\/\"},\"wordCount\":1221,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/wp-query\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2016\/07\/wp_query.jpg\",\"keywords\":[\"webdev\",\"WordPress\"],\"articleSection\":[\"Desarrollo de WordPress\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/wp-query\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/wp-query\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/wp-query\/\",\"name\":\"Construyendo consultas eficientes de WordPress con WP_Query\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/wp-query\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/wp-query\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2016\/07\/wp_query.jpg\",\"datePublished\":\"2020-01-31T10:12:14+00:00\",\"dateModified\":\"2025-02-18T09:52:04+00:00\",\"description\":\"En este tutorial, le mostraremos c\u00f3mo utilizar la clase WP_Query espec\u00edficamente para optimizar las consultas SQL, reduciendo el tiempo de ejecuci\u00f3n y el consumo de recursos.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/wp-query\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/wp-query\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/wp-query\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2016\/07\/wp_query.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2016\/07\/wp_query.jpg\",\"width\":1600,\"height\":998,\"caption\":\"wp_query\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/wp-query\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Desarrollo WordPress\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/desarrollo-wordpress\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Construyendo consultas eficientes de WordPress con WP_Query\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63\",\"name\":\"Carlo Daniele\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g\",\"caption\":\"Carlo Daniele\"},\"description\":\"Carlo is a passionate lover of webdesign and front-end development. He has been playing with WordPress for more than 20 years, also in collaboration with Italian and European universities and educational institutions. He has written hundreds of articles and guides about WordPress, published both on Italian and international websites, as well as on printed magazines. You can find him on LinkedIn.\",\"sameAs\":[\"https:\/\/frammentidicodice.com\/\",\"https:\/\/x.com\/carlodaniele\"],\"url\":\"https:\/\/kinsta.com\/es\/blog\/author\/carlodaniele\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Construyendo consultas eficientes de WordPress con WP_Query","description":"En este tutorial, le mostraremos c\u00f3mo utilizar la clase WP_Query espec\u00edficamente para optimizar las consultas SQL, reduciendo el tiempo de ejecuci\u00f3n y el consumo de recursos.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/es\/blog\/wp-query\/","og_locale":"es_ES","og_type":"article","og_title":"Construyendo consultas eficientes de WordPress con WP_Query","og_description":"En este tutorial, le mostraremos c\u00f3mo utilizar la clase WP_Query espec\u00edficamente para optimizar las consultas SQL, reduciendo el tiempo de ejecuci\u00f3n y el consumo de recursos.","og_url":"https:\/\/kinsta.com\/es\/blog\/wp-query\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2020-01-31T10:12:14+00:00","article_modified_time":"2025-02-18T09:52:04+00:00","og_image":[{"width":1600,"height":998,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2016\/07\/wp_query.jpg","type":"image\/jpeg"}],"author":"Carlo Daniele","twitter_card":"summary_large_image","twitter_description":"En este tutorial, le mostraremos c\u00f3mo utilizar la clase WP_Query espec\u00edficamente para optimizar las consultas SQL, reduciendo el tiempo de ejecuci\u00f3n y el consumo de recursos.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2016\/07\/wp_query.jpg","twitter_creator":"@carlodaniele","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Carlo Daniele","Tiempo de lectura":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/wp-query\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/wp-query\/"},"author":{"name":"Carlo Daniele","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63"},"headline":"Construyendo consultas eficientes de WordPress con WP_Query","datePublished":"2020-01-31T10:12:14+00:00","dateModified":"2025-02-18T09:52:04+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/wp-query\/"},"wordCount":1221,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/wp-query\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2016\/07\/wp_query.jpg","keywords":["webdev","WordPress"],"articleSection":["Desarrollo de WordPress"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/es\/blog\/wp-query\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/wp-query\/","url":"https:\/\/kinsta.com\/es\/blog\/wp-query\/","name":"Construyendo consultas eficientes de WordPress con WP_Query","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/wp-query\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/wp-query\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2016\/07\/wp_query.jpg","datePublished":"2020-01-31T10:12:14+00:00","dateModified":"2025-02-18T09:52:04+00:00","description":"En este tutorial, le mostraremos c\u00f3mo utilizar la clase WP_Query espec\u00edficamente para optimizar las consultas SQL, reduciendo el tiempo de ejecuci\u00f3n y el consumo de recursos.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/wp-query\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/wp-query\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/wp-query\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2016\/07\/wp_query.jpg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2016\/07\/wp_query.jpg","width":1600,"height":998,"caption":"wp_query"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/wp-query\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Desarrollo WordPress","item":"https:\/\/kinsta.com\/es\/secciones\/desarrollo-wordpress\/"},{"@type":"ListItem","position":3,"name":"Construyendo consultas eficientes de WordPress con WP_Query"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63","name":"Carlo Daniele","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g","caption":"Carlo Daniele"},"description":"Carlo is a passionate lover of webdesign and front-end development. He has been playing with WordPress for more than 20 years, also in collaboration with Italian and European universities and educational institutions. He has written hundreds of articles and guides about WordPress, published both on Italian and international websites, as well as on printed magazines. You can find him on LinkedIn.","sameAs":["https:\/\/frammentidicodice.com\/","https:\/\/x.com\/carlodaniele"],"url":"https:\/\/kinsta.com\/es\/blog\/author\/carlodaniele\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/30942","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/36"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=30942"}],"version-history":[{"count":5,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/30942\/revisions"}],"predecessor-version":[{"id":31425,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/30942\/revisions\/31425"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/30942\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/30942\/translations\/it"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/30942\/translations\/fr"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/30942\/translations\/es"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/30942\/translations\/pt"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/30942\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/5962"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=30942"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=30942"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=30942"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}