{"id":12380145,"date":"2026-03-20T23:07:17","date_gmt":"2026-03-20T15:07:17","guid":{"rendered":"https:\/\/www.likacloud.com\/knowledge\/wp_query-%e5%85%a8%e9%9d%a2%e8%a7%a3%e6%9e%90%ef%bc%9a%e7%b2%be%e5%87%86%e6%8e%a7%e5%88%b6-wordpress-%e4%b8%bb%e9%a2%98%e5%86%85%e5%ae%b9%e5%be%aa%e7%8e%af\/"},"modified":"2026-06-05T01:16:24","modified_gmt":"2026-06-04T17:16:24","slug":"wp-query-complete-guide-wordpress-theme-content-loop","status":"publish","type":"knowledge_post","link":"https:\/\/www.likacloud.com\/es\/knowledge\/wordpress\/wp-query-complete-guide-wordpress-theme-content-loop\/","title":{"rendered":"An\u00e1lisis completo de WP_Query: control preciso de la rotaci\u00f3n de contenido de los temas de WordPress."},"content":{"rendered":"<p class=\"wp-block-paragraph\">En el desarrollo de temas para WordPress, el ciclo de contenido es el motor central que permite la exhibici\u00f3n din\u00e1mica de las p\u00e1ginas. Aunque el ciclo principal por defecto es simple y f\u00e1cil de usar, no es suficiente para satisfacer necesidades como el dise\u00f1o de m\u00faltiples bloques en la p\u00e1gina de inicio, la visualizaci\u00f3n de tipos de art\u00edculos personalizados o filtros complejos. En estos casos, es esencial dominar a fondo los conceptos relacionados con el ciclo de contenido. <code data-no-auto-translation=\"\">WP_Query<\/code> Las clases se han convertido en la clave para que los desarrolladores logren un control preciso del contenido. Permite recuperar cualquier art\u00edculo, p\u00e1gina o tipo de art\u00edculo personalizado de la base de datos que cumpla con ciertas condiciones, y controlar completamente la forma en que se presenta el resultado. Constituyen la piedra angular para construir funciones tem\u00e1ticas avanzadas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Comprender el sistema de par\u00e1metros centrales de WP_Query<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code data-no-auto-translation=\"\">WP_Query<\/code> La gran ventaja de este sistema radica en que puede recibir un amplio conjunto de par\u00e1metros, los cuales permiten filtrar de manera precisa el contenido de la base de datos. Comprender la clasificaci\u00f3n y el uso de estos par\u00e1metros es el primer paso para crear consultas eficientes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Par\u00e1metros de consulta b\u00e1sica y paginaci\u00f3n<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Los par\u00e1metros m\u00e1s utilizados se emplean para definir el rango b\u00e1sico de la consulta y la paginaci\u00f3n. Por ejemplo,<code data-no-auto-translation=\"\">post_type<\/code> Los par\u00e1metros determinan que el objeto de la consulta sea un art\u00edculo.<code data-no-auto-translation=\"\">post<\/code>), p\u00e1gina (<code data-no-auto-translation=\"\">page<\/code>O cualquier tipo de art\u00edculo personalizado que ya est\u00e9 registrado.<code data-no-auto-translation=\"\">posts_per_page<\/code> Y <code data-no-auto-translation=\"\">paged<\/code> Entonces, ambos controlan conjuntamente la l\u00f3gica de paginaci\u00f3n.<\/p>\n<!-- AUTO_INTERNAL_LINKS_START --><p>Lecturas recomendadas <a href=\"https:\/\/www.likacloud.com\/es\/knowledge\/wordpress\/how-to-develop-a-high-quality-wordpress-theme-from-scratch\/\">Te ense\u00f1ar\u00e9 paso a paso c\u00f3mo desarrollar un tema para WordPress de alta calidad desde cero.<\/a>\u3002<\/p><!-- AUTO_INTERNAL_LINKS_END -->\n\n\n\n\n<pre class=\"wp-block-code\" data-no-auto-translation=\"\"><code class=\"language-php\" data-no-auto-translation=\"\">$args = array(\n    \/\/ \u6307\u5b9a\u67e5\u8be2\u4ea7\u54c1\u7c7b\u578b\n    &#039;post_type&#039;      =&gt; &#039;product&#039;,\n    \/\/ \u6bcf\u9875\u663e\u793a8\u4e2a\u9879\u76ee\n    &#039;posts_per_page&#039; =&gt; 8,\n    \/\/ \u83b7\u53d6\u7b2c2\u9875\u7684\u5185\u5bb9\n    &#039;paged&#039;          =&gt; 2,\n    \/\/ \u6309\u7167\u53d1\u5e03\u65e5\u671f\u964d\u5e8f\u6392\u5217\n    &#039;orderby&#039;        =&gt; &#039;date&#039;,\n    &#039;order&#039;          =&gt; &#039;DESC&#039;,\n);\n$product_query = new WP_Query( $args );<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Clasificaci\u00f3n y par\u00e1metros de consulta de metadatos<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Para condiciones de filtrado m\u00e1s complejas\u2026<code data-no-auto-translation=\"\">tax_query<\/code> Y <code data-no-auto-translation=\"\">meta_query<\/code> Los par\u00e1metros son esenciales.<code data-no-auto-translation=\"\">tax_query<\/code> Se utiliza para procesar consultas relacionadas con categor\u00edas (Category), etiquetas (Tag) y cualquier sistema de clasificaci\u00f3n personalizado (Taxonomy). <code data-no-auto-translation=\"\">meta_query<\/code> Se utiliza para consultar art\u00edculos que contienen campos personalizados espec\u00edficos (Post Meta) y sus valores; por ejemplo, para buscar todos los productos que est\u00e1n \u201cen stock\u201d o tienen un \u201cprecio especial\u201d.<\/p>\n<!-- AUTO_SYNCED_PATTERN_INSERT_START -->\n\r\n<div class=\"flex justify-between items-center flex-col lg:flex-row xl:flex-col 2xl:flex-row gap-6 sm:gap-8 rounded-lg border border-gray-200 dark:border-gray-700 p-4 mb-8 lg:mb-10 sm:p-6 bg-white dark:bg-gray-750 shadow-md transition-colors duration-300\"\r\n     data-link=\"https:\/\/www.likacloud.com\/es\/tolink\/ultahost-wordpress-hosting\/\">\r\n     \r\n  <div class=\"flex flex-col gap-3 gap-4 sm:gap-6 w-full\">\r\n    <strong class=\"text-2xl font-semibold text-gray-900 dark:text-gray-200\">\r\n      Servidor de WordPress de UltaHost    <\/strong>\r\n    <div class=\"text-gray-600 dark:text-gray-300 word-word\">Garant\u00eda de reembolso en 30 d\u00edas, ancho de banda ilimitado y bases de datos, protecci\u00f3n gratuita contra ataques DDoS; descuento del 50% al comprar por 3 a\u00f1os (versiones de 4 TB y 5 TB).<\/div>\r\n  <\/div>\r\n\r\n  <div class=\"flex items-center flex-col md:flex-row lg:flex-col xl:flex-row 2xl:flex-col gap-6 shrink-0\">\r\n          <a href=\"https:\/\/www.likacloud.com\/es\/tolink\/ultahost-wordpress-hosting\/\">\r\n                  <img decoding=\"async\" src=\"https:\/\/www.likacloud.com\/wp-content\/uploads\/2025\/12\/20251227020448.webp\" alt=\"LOGO de UltaHost\" class=\"content-promotion-card-icon h-9 min-h-9 dark:hidden\" title=\"\">\r\n          <img decoding=\"async\" src=\"https:\/\/www.likacloud.com\/wp-content\/uploads\/2025\/12\/20251229052118.webp\" alt=\"LOGO de UltaHost\" class=\"content-promotion-card-icon h-9 min-h-9 hidden dark:block\" title=\"\">\r\n              <\/a>\r\n    \r\n    <a href=\"https:\/\/www.likacloud.com\/es\/tolink\/ultahost-wordpress-hosting\/\"\r\n       class=\"bg-blue-500 w-full md:w-auto lg:w-full xl:w-auto 2xl:w-full text-center !text-white dark:!text-gray-200 !px-5 !py-1.5 rounded-full hover:bg-blue-600 transition-colors\">\r\n       p\u00e1gina de acceso    <\/a>\r\n  <\/div>\r\n<\/div>\n<!-- AUTO_SYNCED_PATTERN_INSERT_END -->\n\n\n\n\n\n<pre class=\"wp-block-code\" data-no-auto-translation=\"\"><code class=\"language-php\" data-no-auto-translation=\"\">$args = array(\n    &#039;post_type&#039; =&gt; &#039;book&#039;,\n    &#039;tax_query&#039; =&gt; array(\n        array(\n            &#039;taxonomy&#039; =&gt; &#039;genre&#039;, \/\/ \u81ea\u5b9a\u4e49\u5206\u7c7b\u6cd5\uff1a\u4e66\u7c4d\u7c7b\u578b\n            &#039;field&#039;    =&gt; &#039;slug&#039;,\n            &#039;terms&#039;    =&gt; array( &#039;science-fiction&#039;, &#039;fantasy&#039; ),\n            &#039;operator&#039; =&gt; &#039;IN&#039;, \/\/ \u67e5\u8be2\u7c7b\u578b\u4e3a\u201c\u79d1\u5e7b\u201d\u6216\u201c\u5947\u5e7b\u201d\u7684\u4e66\u7c4d\n        ),\n    ),\n    &#039;meta_query&#039; =&gt; array(\n        array(\n            &#039;key&#039;     =&gt; &#039;_price&#039;,\n            &#039;value&#039;   =&gt; 50,\n            &#039;compare&#039; =&gt; &#039;&lt;&#039;,\n            &#039;type&#039;    =&gt; &#039;NUMERIC&#039;, \/\/ \u67e5\u8be2\u4ef7\u683c\u4f4e\u4e8e50\u7684\u4e66\u7c4d\n        ),\n    ),\n);<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Construir y ejecutar ciclos de consultas personalizados<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s de definir los par\u00e1metros de la consulta, el siguiente paso es instanciarla. <code data-no-auto-translation=\"\">WP_Query<\/code> Y se deben generar los resultados de manera secuencial y segura. Este proceso sigue un patr\u00f3n est\u00e1ndar, y seguirlo es de vital importancia para mantener la estabilidad del entorno de las variables globales.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Estructura de ciclo de consulta est\u00e1ndar<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Un ciclo de consulta personalizado y robusto debe incluir cuatro pasos: inicializar el objeto de consulta, verificar si hay resultados, imprimir el contenido en ciclo y reiniciar los datos globales. Dentro del ciclo, se pueden utilizar\u2026 <code data-no-auto-translation=\"\">the_post()<\/code> M\u00e9todos y una serie de etiquetas de plantilla (como\u2026) <code data-no-auto-translation=\"\">the_title()<\/code>, <code data-no-auto-translation=\"\">the_content()<\/code>) para generar la informaci\u00f3n de cada art\u00edculo.<\/p>\n\n\n\n<pre class=\"wp-block-code\" data-no-auto-translation=\"\"><code class=\"language-php\" data-no-auto-translation=\"\">\/\/ 1. \u521d\u59cb\u5316\n$featured_args = array( &#039;category_name&#039; =&amp;gt; &#039;featured&#039;, &#039;posts_per_page&#039; =&amp;gt; 3 );\n$featured_query = new WP_Query( $featured_args );\n\n\/\/ 2. \u68c0\u67e5\nif ( $featured_query-&amp;gt;have_posts() ) {\n    echo &#039;&lt;section class=&quot;featured-posts&quot;&gt;&#039;;\n    \/\/ 3. \u5faa\u73af\n    while ( $featured_query-&amp;gt;have_posts() ) {\n        $featured_query-&amp;gt;the_post();\n        \/\/ \u73b0\u5728\u53ef\u4ee5\u4f7f\u7528\u6a21\u677f\u6807\u7b7e\n        echo &#039;&lt;article&gt;&#039;;\n        echo &#039;&lt;h2&gt;&lt;a href=&quot;\/es\/&#039; . esc_url( get_permalink() ) . &#039;\/&quot;&gt;&#039;`.get_the_title().`&#039;&lt;\/a&gt;&lt;\/h2&gt;&#039;;\n        the_excerpt();\n        echo &#039;&lt;\/article&gt;&#039;;\n    }\n    echo &#039;&lt;\/section&gt;&#039;;\n} else {\n    \/\/ \u5982\u679c\u6ca1\u6709\u627e\u5230\u6587\u7ae0\n    echo &#039;&lt;p&gt;No hay contenido seleccionado por el momento.&lt;\/p&gt;&#039;\/\/ 4. Restablecer los datos del post (&iexcl;Paso clave!)\nwp_reset_postdata();<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Tratar la metainformaci\u00f3n contenida en los resultados de la consulta.<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code data-no-auto-translation=\"\">WP_Query<\/code> Los objetos no solo proporcionan datos de los art\u00edculos, sino que tambi\u00e9n contienen metainformaci\u00f3n sobre la propia consulta, lo cual es de gran utilidad en el desarrollo. Por ejemplo,<code data-no-auto-translation=\"\">$query-&gt;max_num_pages<\/code> Los atributos permiten obtener el n\u00famero total de p\u00e1ginas de los resultados de la consulta, lo que se utiliza para crear una navegaci\u00f3n de paginaci\u00f3n personalizada.<code data-no-auto-translation=\"\">$query-&gt;found_posts<\/code> Los atributos devuelven el n\u00famero total de art\u00edculos que cumplen con los criterios especificados, y no \u00fanicamente la cantidad de art\u00edculos que se muestran en la p\u00e1gina actual.<\/p>\n\n\n\n<pre class=\"wp-block-code\" data-no-auto-translation=\"\"><code class=\"language-php\" data-no-auto-translation=\"\">\/\/ \u5728\u5faa\u73af\u4e4b\u540e\uff0c\u53ef\u4ee5\u83b7\u53d6\u8fd9\u4e9b\u4fe1\u606f\n$total_posts = $featured_query-&amp;gt;found_posts;\n$total_pages = $featured_query-&amp;gt;max_num_pages;\n\necho &quot;&lt;p&gt;Se encontraron un total de {$total_posts} art&iacute;culos seleccionados, distribuidos en {$total_pages} p&aacute;ginas.&lt;\/p&gt;&quot;Bas&aacute;ndote en esta informaci&oacute;n, puedes generar enlaces de paginaci&oacute;n personalizados.<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Optimizaci\u00f3n del rendimiento de las consultas y de las estrategias de cach\u00e9<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A medida que el contenido de los sitios web aumenta y la complejidad de las consultas se eleva, el rendimiento se convierte en un problema que no se puede ignorar. <code data-no-auto-translation=\"\">WP_Query<\/code> Esto podr\u00eda causar una carga excesiva en la base de datos y ralentizar la velocidad de las p\u00e1ginas.<\/p>\n<!-- AUTO_INTERNAL_LINKS_START --><p>Lecturas recomendadas <a href=\"https:\/\/www.likacloud.com\/es\/knowledge\/wordpress\/professional-wordpress-theme-development-responsive-website\/\">An\u00e1lisis detallado del desarrollo de temas profesionales para WordPress: Creaci\u00f3n de sitios web responsive desde cero<\/a>\u3002<\/p><!-- AUTO_INTERNAL_LINKS_END -->\n\n\n\n\n<h3 class=\"wp-block-heading\">Usar la API Transients para cachear los resultados de las consultas<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Para consultas cuyos resultados no cambian con frecuencia (como \u201cLos art\u00edculos m\u00e1s populares de este mes\u201d o listas de recomendaciones de editores), utilizar la API de Transientes de WordPress es una opci\u00f3n excelente. Esta API permite almacenar temporalmente los resultados de las consultas o los fragmentos de HTML generados directamente en la base de datos o en la cach\u00e9 de memoria, y leerlos directamente durante el per\u00edodo de validez, evitando as\u00ed la ejecuci\u00f3n repetida de consultas complejas a la base de datos.<\/p>\n\n\n\n<pre class=\"wp-block-code\" data-no-auto-translation=\"\"><code class=\"language-php\" data-no-auto-translation=\"\">\/\/ \u5b9a\u4e49\u4e00\u4e2a\u552f\u4e00\u7684\u77ac\u6001\u952e\u540d\n$transient_key = &#039;mytheme_hot_products_week_42&#039;;\n\n\/\/ \u5c1d\u8bd5\u4ece\u7f13\u5b58\u4e2d\u83b7\u53d6\n$cached_html = get_transient( $transient_key );\n\nif ( false === $cached_html ) {\n    \/\/ \u7f13\u5b58\u4e0d\u5b58\u5728\u6216\u5df2\u8fc7\u671f\uff0c\u6267\u884c\u67e5\u8be2\n    $args = array(\n        &#039;post_type&#039;      =&gt; &#039;product&#039;,\n        &#039;meta_key&#039;       =&gt; &#039;sales_count&#039;,\n        &#039;orderby&#039;        =&gt; &#039;meta_value_num&#039;,\n        &#039;order&#039;          =&gt; &#039;DESC&#039;,\n        &#039;posts_per_page&#039; =&gt; 5,\n    );\n    $hot_query = new WP_Query( $args );\n\nob_start(); \/\/ \u5f00\u542f\u8f93\u51fa\u7f13\u51b2\n    \/\/ ... \u5faa\u73af\u8f93\u51fa\u6587\u7ae0HTML\u5230\u7f13\u51b2\u533a\n    if ( $hot_query-&gt;have_posts() ) {\n        while ( $hot_query-&gt;have_posts() ) { $hot_query-&gt;the_post();\n            \/\/ \u8f93\u51fa\u5217\u8868\u9879\n        }\n    }\n    wp_reset_postdata();\n    $cached_html = ob_get_clean(); \/\/ \u83b7\u53d6\u7f13\u51b2\u5185\u5bb9\u5e76\u6e05\u7a7a\n\n\/\/ \u5c06\u7ed3\u679c\u7f13\u5b5812\u5c0f\u65f6\n    set_transient( $transient_key, $cached_html, 12 * HOUR_IN_SECONDS );\n}\n\n\/\/ \u8f93\u51fa\u7f13\u5b58\u6216\u521a\u751f\u6210\u7684\u5185\u5bb9\necho $cached_html;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Use con cautela los par\u00e1metros \u2018posts_per_page\u2019 y \u2018offset\u2019.\u2019<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A veces, los desarrolladores desean omitir los primeros N art\u00edculos (por ejemplo, al mostrar \u201cM\u00e1s noticias\u201d en la barra lateral, omitir los titulares principales). Esto se puede lograr de manera directa. <code data-no-auto-translation=\"\">offset<\/code> Los par\u00e1metros se utilizar\u00e1n en la funci\u00f3n de paginaci\u00f3n.<code data-no-auto-translation=\"\">paged<\/code>Estos conflictos provocan errores en el c\u00e1lculo de la paginaci\u00f3n. Una pr\u00e1ctica m\u00e1s recomendable es utilizarlo directamente dentro del ciclo. <code data-no-auto-translation=\"\">$query-&gt;current_post<\/code> Se pueden realizar comprobaciones condicionales sobre los atributos, o utilizarlas al modificar la consulta principal. <code data-no-auto-translation=\"\">pre_get_posts<\/code> Se utilizan mecanismos de enlace (hooks) para realizar procesamientos l\u00f3gicos m\u00e1s complejos, en lugar de simplemente aplicar desplazamientos (offsets).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Modificar la consulta principal mediante la utilizaci\u00f3n de hooks.<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En muchos casos, no es necesario crear un ciclo completamente nuevo e independiente, sino que se desea modificar la consulta principal que WordPress genera autom\u00e1ticamente para la p\u00e1gina actual. Por ejemplo, podr\u00eda querer que la p\u00e1gina de archivos de una categor\u00eda muestre tanto los art\u00edculos est\u00e1ndar como un tipo de art\u00edculo personalizado. Crear un ciclo auxiliar y reemplazar todo el ciclo principal es tanto ineficiente como problem\u00e1tico. En estos casos, se debe utilizar\u2026 <code data-no-auto-translation=\"\">pre_get_posts<\/code> Acci\u00f3n de enlace (Action Hook).<\/p>\n<!-- AUTO_SYNCED_PATTERN_INSERT_START -->\n\r\n<div class=\"flex justify-between items-center flex-col lg:flex-row xl:flex-col 2xl:flex-row gap-6 sm:gap-8 rounded-lg border border-gray-200 dark:border-gray-700 p-4 mb-8 lg:mb-10 sm:p-6 bg-white dark:bg-gray-750 shadow-md transition-colors duration-300\"\r\n     data-link=\"https:\/\/www.likacloud.com\/es\/tolink\/hosting-shared-hosting\/\">\r\n     \r\n  <div class=\"flex flex-col gap-3 gap-4 sm:gap-6 w-full\">\r\n    <strong class=\"text-2xl font-semibold text-gray-900 dark:text-gray-200\">\r\n      hosting.com Alojamiento compartido    <\/strong>\r\n    <div class=\"text-gray-600 dark:text-gray-300 word-word\">Alto rendimiento con CPU AMD EPYC, almacenamiento SSD NVMe y LiteSpeed, asistencia interna de expertos 24 horas al d\u00eda, 7 d\u00edas a la semana, medidas de seguridad avanzadas como SSL, fuerza bruta, protecci\u00f3n contra malware y DDoS, ahorro de hasta 73%.<\/div>\r\n  <\/div>\r\n\r\n  <div class=\"flex items-center flex-col md:flex-row lg:flex-col xl:flex-row 2xl:flex-col gap-6 shrink-0\">\r\n          <a href=\"https:\/\/www.likacloud.com\/es\/tolink\/hosting-shared-hosting\/\">\r\n                  <img decoding=\"async\" src=\"https:\/\/www.likacloud.com\/wp-content\/uploads\/2025\/09\/20250901222940.svg\" alt=\"LOGO hosting.com\" class=\"content-promotion-card-icon h-9 min-h-9 dark:hidden\" title=\"\">\r\n          <img decoding=\"async\" src=\"https:\/\/www.likacloud.com\/wp-content\/uploads\/2025\/12\/20251228220957.webp\" alt=\"LOGO hosting.com\" class=\"content-promotion-card-icon h-9 min-h-9 hidden dark:block\" title=\"\">\r\n              <\/a>\r\n    \r\n    <a href=\"https:\/\/www.likacloud.com\/es\/tolink\/hosting-shared-hosting\/\"\r\n       class=\"bg-blue-500 w-full md:w-auto lg:w-full xl:w-auto 2xl:w-full text-center !text-white dark:!text-gray-200 !px-5 !py-1.5 rounded-full hover:bg-blue-600 transition-colors\">\r\n       p\u00e1gina de acceso    <\/a>\r\n  <\/div>\r\n<\/div>\n<!-- AUTO_SYNCED_PATTERN_INSERT_END -->\n\n\n\n\n\n<h3 class=\"wp-block-heading\">Usar `pre_get_posts` en `functions.php`<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Coloca la l\u00f3gica de modificaci\u00f3n dentro del tema. <code data-no-auto-translation=\"\">functions.php<\/code> En el archivo, es posible modificar el comportamiento de la consulta principal de manera elegante y eficiente. La clave radica en utilizar etiquetas condicionales (como\u2026) <code data-no-auto-translation=\"\">is_category()<\/code>, <code data-no-auto-translation=\"\">is_tag()<\/code>) y la verificaci\u00f3n. <code data-no-auto-translation=\"\">$query-&gt;is_main_query()<\/code> Esto se hace para garantizar que los cambios se realicen \u00fanicamente en el contexto correcto, evitando as\u00ed que afecten la interfaz de administraci\u00f3n en segundo plano u otras consultas.<\/p>\n\n\n\n<pre class=\"wp-block-code\" data-no-auto-translation=\"\"><code class=\"language-php\" data-no-auto-translation=\"\">add_action( &#039;pre_get_posts&#039;, &#039;mytheme_adjust_main_query&#039; );\nfunction mytheme_adjust_main_query( $query ) {\n    \/\/ \u4ec5\u5728\u524d\u7aef\u3001\u4e14\u662f\u4e3b\u67e5\u8be2\u3001\u4e14\u662f\u201c\u65b0\u95fb\u201d\u5206\u7c7b\u9875\u65f6\u6267\u884c\n    if ( ! is_admin() &amp;&amp; $query-&gt;is_main_query() &amp;&amp; is_category( &#039;news&#039; ) ) {\n        \/\/ \u8ba9\u4e3b\u67e5\u8be2\u540c\u65f6\u83b7\u53d6\u201cpost\u201d\u548c\u201cpress-release\u201d\u4e24\u79cd\u6587\u7ae0\u7c7b\u578b\n        $query-&gt;set( &#039;post_type&#039;, array( &#039;post&#039;, &#039;press-release&#039; ) );\n        \/\/ \u6309\u81ea\u5b9a\u4e49\u7684\u201c\u91cd\u8981\u6027\u201d\u5143\u5b57\u6bb5\u6392\u5e8f\n        $query-&gt;set( &#039;meta_key&#039;, &#039;importance_rating&#039; );\n        $query-&gt;set( &#039;orderby&#039;, &#039;meta_value_num&#039; );\n        $query-&gt;set( &#039;order&#039;, &#039;DESC&#039; );\n    }\n\n\/\/ \u5728\u641c\u7d22\u9875\uff0c\u5c06\u641c\u7d22\u8303\u56f4\u6269\u5c55\u5230\u201c\u4ea7\u54c1\u201d\u81ea\u5b9a\u4e49\u6587\u7ae0\u7c7b\u578b\n    if ( ! is_admin() &amp;&amp; $query-&gt;is_main_query() &amp;&amp; $query-&gt;is_search() ) {\n        $current_types = $query-&gt;get( &#039;post_type&#039; );\n        if ( empty( $current_types ) ) {\n            \/\/ \u9ed8\u8ba4\u641c\u7d22\u53ea\u5305\u542b\u2018post\u2019\uff0c\u6211\u4eec\u52a0\u5165\u2018product\u2019\n            $query-&gt;set( &#039;post_type&#039;, array( &#039;post&#039;, &#039;page&#039;, &#039;product&#039; ) );\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">res\u00famenes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code data-no-auto-translation=\"\">WP_Query<\/code> Es la clave para desbloquear el potencial de visualizaci\u00f3n del contenido de los temas de WordPress. Desde sencillas listas de art\u00edculos hasta p\u00e1ginas de agregaci\u00f3n complejas que dependen de m\u00faltiples categor\u00edas, metadatos, fechas y otras condiciones, ofrece una flexibilidad y un control sin igual. Es esencial dominar su sistema de par\u00e1metros, seguir el patr\u00f3n est\u00e1ndar de \u201cinicializaci\u00f3n-comprobaci\u00f3n-bucle-reestablecimiento\u201d y utilizarlo de manera eficiente. <code data-no-auto-translation=\"\">pre_get_posts<\/code> Optimizar las consultas principales y utilizar estrategias de cach\u00e9 para garantizar el rendimiento son habilidades esenciales para todo desarrollador de temas avanzados. A trav\u00e9s de la pr\u00e1ctica, podr\u00e1s crear soluciones para la exhibici\u00f3n de contenido din\u00e1mico que sean eficientes, f\u00e1ciles de mantener y capaces de responder a diversas necesidades comerciales.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ Preguntas m\u00e1s frecuentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Si los resultados de la consulta realizada con WP_Query son vac\u00edos, \u00bfc\u00f3mo puedo depurar el problema?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En primer lugar, verifica si la ortograf\u00eda y los valores del array de par\u00e1metros son correctos, en particular los nombres de las clasificaciones y los identificadores de los tipos de art\u00edculos. En segundo lugar, utiliza\u2026 <code data-no-auto-translation=\"\">print_r( $query-&gt;request );<\/code> Despu\u00e9s de inicializar el objeto de consulta, imprima la sentencia SQL que se ejecuta realmente; esto revelar\u00e1 directamente los criterios de b\u00fasqueda. Por \u00faltimo, aseg\u00farese de que el contenido que est\u00e1 buscando realmente existe y que su estado sea \u201cpublicado\u201d.<code data-no-auto-translation=\"\">publish<\/code>Por defecto\u2026 <code data-no-auto-translation=\"\">WP_Query<\/code> No se realizan consultas a borradores ni a art\u00edculos programados para publicarse en un futuro determinado.<\/p>\n<!-- AUTO_INTERNAL_LINKS_START --><p>Lecturas recomendadas <a href=\"https:\/\/www.likacloud.com\/es\/knowledge\/wordpress\/wordpress-theme-development-custom-theme-guide-2026\/\">Desarrollo de temas para WordPress: Una gu\u00eda completa para crear temas personalizados desde cero<\/a>\u3002<\/p><!-- AUTO_INTERNAL_LINKS_END -->\n\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfCu\u00e1l deber\u00eda elegir entre WP_Query y get_posts?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code data-no-auto-translation=\"\">get_posts<\/code> Uso dentro de una funci\u00f3n <code data-no-auto-translation=\"\">WP_Query<\/code>Pero por defecto devuelve un array de objetos de art\u00edculos, sin modificar las variables globales (como\u2026) <code data-no-auto-translation=\"\">$post<\/code>Por lo tanto, generalmente no es necesario realizar ninguna llamada. <code data-no-auto-translation=\"\">wp_reset_postdata()<\/code>Es m\u00e1s ligero y adecuado para tareas sencillas de obtenci\u00f3n de datos, como generar una lista de enlaces.<code data-no-auto-translation=\"\">WP_Query<\/code> El objeto ofrece una funcionalidad m\u00e1s completa, ya que mantiene metadatos como la paginaci\u00f3n y el n\u00famero total de elementos. Su ciclo de ejecuci\u00f3n permite establecer correctamente las variables globales necesarias para proporcionar soporte adecuado. <code data-no-auto-translation=\"\">the_title()<\/code> Las etiquetas de plantilla, como `%s` y `%1$s`, son la opci\u00f3n ideal para construir el contenido que se repetir\u00e1 de manera recurrente en los temas (templates).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfC\u00f3mo consultar art\u00edculos de un autor espec\u00edfico o de una fecha determinada?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Se puede utilizar. <code data-no-auto-translation=\"\">author<\/code> Par\u00e1metros (que aceptan el ID del autor, el nombre de usuario o el apodo del usuario) y <code data-no-auto-translation=\"\">date_query<\/code> Par\u00e1metros.<code data-no-auto-translation=\"\">date_query<\/code> Muy potente; te permite realizar consultas por a\u00f1o\/mes\/d\u00eda espec\u00edfico, rango de fechas, fechas relativas (como \u201clos \u00faltimos 30 d\u00edas\u201d) \ub4f1.<\/p>\n<!-- AUTO_SYNCED_PATTERN_INSERT_START -->\n\r\n<div class=\"flex justify-between items-center flex-col lg:flex-row xl:flex-col 2xl:flex-row gap-6 sm:gap-8 rounded-lg border border-gray-200 dark:border-gray-700 p-4 mb-8 lg:mb-10 sm:p-6 bg-white dark:bg-gray-750 shadow-md transition-colors duration-300\"\r\n     data-link=\"https:\/\/www.likacloud.com\/es\/tolink\/interserver-webhosting\/\">\r\n     \r\n  <div class=\"flex flex-col gap-3 gap-4 sm:gap-6 w-full\">\r\n    <strong class=\"text-2xl font-semibold text-gray-900 dark:text-gray-200\">\r\n      Alojamiento compartido InterServer    <\/strong>\r\n    <div class=\"text-gray-600 dark:text-gray-300 word-word\">Alojamiento compartido $2.50 USD al mes , primer mes $0.1 USD c\u00f3digo promocional tryinterserver, 461 scripts de aplicaciones en la nube, instalaci\u00f3n en un clic.<\/div>\r\n  <\/div>\r\n\r\n  <div class=\"flex items-center flex-col md:flex-row lg:flex-col xl:flex-row 2xl:flex-col gap-6 shrink-0\">\r\n          <a href=\"https:\/\/www.likacloud.com\/es\/tolink\/interserver-webhosting\/\">\r\n                  <img decoding=\"async\" src=\"https:\/\/www.likacloud.com\/wp-content\/uploads\/2025\/12\/20251228045033.svg\" alt=\"LOGOTIPO DE INTERSERVER\" class=\"content-promotion-card-icon h-9 min-h-9 dark:hidden\" title=\"\">\r\n          <img decoding=\"async\" src=\"https:\/\/www.likacloud.com\/wp-content\/uploads\/2025\/12\/20251229054830.webp\" alt=\"LOGOTIPO DE INTERSERVER\" class=\"content-promotion-card-icon h-9 min-h-9 hidden dark:block\" title=\"\">\r\n              <\/a>\r\n    \r\n    <a href=\"https:\/\/www.likacloud.com\/es\/tolink\/interserver-webhosting\/\"\r\n       class=\"bg-blue-500 w-full md:w-auto lg:w-full xl:w-auto 2xl:w-full text-center !text-white dark:!text-gray-200 !px-5 !py-1.5 rounded-full hover:bg-blue-600 transition-colors\">\r\n       p\u00e1gina de acceso    <\/a>\r\n  <\/div>\r\n<\/div>\n<!-- AUTO_SYNCED_PATTERN_INSERT_END -->\n\n\n\n\n\n<pre class=\"wp-block-code\" data-no-auto-translation=\"\"><code class=\"language-php\" data-no-auto-translation=\"\">$args = array(\n    &#039;author&#039; =&gt; 5, \/\/ \u67e5\u8be2ID\u4e3a5\u7684\u4f5c\u8005\u7684\u6587\u7ae0\n    &#039;date_query&#039; =&gt; array(\n        array(\n            &#039;after&#039; =&gt; &#039;2026-01-01&#039;, \/\/ 2026\u5e741\u67081\u65e5\u4e4b\u540e\n            &#039;before&#039; =&gt; &#039;2026-12-31&#039;, \/\/ 2026\u5e7412\u670831\u65e5\u4e4b\u524d\n            &#039;inclusive&#039; =&gt; true, \/\/ \u5305\u542b\u8d77\u6b62\u65e5\u671f\n        ),\n    ),\n);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPor qu\u00e9 es necesario llamar a wp_reset_postdata()?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En <code data-no-auto-translation=\"\">WP_Query<\/code> Durante el ciclo,<code data-no-auto-translation=\"\">the_post()<\/code> El m\u00e9todo establecer\u00e1 un valor a nivel global. <code data-no-auto-translation=\"\">$post<\/code> Variables. Si no se restablecen, el c\u00f3digo posterior (por ejemplo, otras partes del bucle principal, los widgets de la barra lateral o ciertas funciones de los plugins) podr\u00eda utilizar incorrectamente estos valores modificados. <code data-no-auto-translation=\"\">$post<\/code> Estos objetos pueden causar que se muestre contenido incorrecto o que se produzcan comportamientos inesperados.<code data-no-auto-translation=\"\">wp_reset_postdata()<\/code> La funci\u00f3n de esto es\u2026 (The function of this is\u2026) <code data-no-auto-translation=\"\">$post<\/code> Restaurar el art\u00edculo actual en la consulta principal es esencial para garantizar la coherencia del entorno global. Esta es una medida de seguridad de suma importancia.<\/p>","protected":false},"excerpt":{"rendered":"<p>El art\u00edculo profundiza en la clase WP_Query en el desarrollo de WordPress, que es una herramienta clave para ir m\u00e1s all\u00e1 del bucle principal predeterminado y lograr un control preciso del contenido. Analiza en detalle su sistema de par\u00e1metros central, que incluye consultas b\u00e1sicas, paginaci\u00f3n y filtrado complejo mediante tax_query y meta_query, y proporciona m\u00e9todos est\u00e1ndar para construir bucles de consulta personalizados, lo que constituye una gu\u00eda pr\u00e1ctica para crear funciones avanzadas en los temas.<\/p>","protected":false},"author":7,"featured_media":0,"template":"","meta":{"_acf_changed":false,"footnotes":""},"tags":[806,3369,804,2811,3370],"knowledge_category":[280],"class_list":["post-12380145","knowledge_post","type-knowledge_post","status-publish","hentry","tag-wordpress-development","tag-wp-query","tag-theme-development","tag-content-loop","tag-database-queries","knowledge_category-wordpress"],"acf":{"site_seo_keywords":"WP_Query, WordPress \u4e3b\u9898\u5f00\u53d1, \u5185\u5bb9\u5faa\u73af, \u81ea\u5b9a\u4e49\u67e5\u8be2, \u5206\u7c7b\u6cd5\u67e5\u8be2, \u5143\u6570\u636e\u67e5\u8be2, \u7cbe\u51c6\u63a7\u5236\u6587\u7ae0\u8f93\u51fa, WordPress \u9ad8\u7ea7\u529f\u80fd"},"_links":{"self":[{"href":"https:\/\/www.likacloud.com\/es\/wp-json\/wp\/v2\/knowledge_posts\/12380145","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.likacloud.com\/es\/wp-json\/wp\/v2\/knowledge_posts"}],"about":[{"href":"https:\/\/www.likacloud.com\/es\/wp-json\/wp\/v2\/types\/knowledge_post"}],"author":[{"embeddable":true,"href":"https:\/\/www.likacloud.com\/es\/wp-json\/wp\/v2\/users\/7"}],"version-history":[{"count":1,"href":"https:\/\/www.likacloud.com\/es\/wp-json\/wp\/v2\/knowledge_posts\/12380145\/revisions"}],"predecessor-version":[{"id":12406424,"href":"https:\/\/www.likacloud.com\/es\/wp-json\/wp\/v2\/knowledge_posts\/12380145\/revisions\/12406424"}],"wp:attachment":[{"href":"https:\/\/www.likacloud.com\/es\/wp-json\/wp\/v2\/media?parent=12380145"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.likacloud.com\/es\/wp-json\/wp\/v2\/tags?post=12380145"},{"taxonomy":"knowledge_category","embeddable":true,"href":"https:\/\/www.likacloud.com\/es\/wp-json\/wp\/v2\/knowledge_category?post=12380145"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}