{"id":233644,"date":"2023-02-19T15:48:00","date_gmt":"2023-02-19T12:48:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233644"},"modified":"2022-11-11T00:48:40","modified_gmt":"2022-11-10T21:48:40","slug":"guia-modificar-la-consulta-global-de-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/guia-modificar-la-consulta-global-de-wordpress\/","title":{"rendered":"Gu\u00eda: modificar la consulta global de WordPress"},"content":{"rendered":"\n<p>En algunos casos, es posible que deba modificar la consulta de publicaci\u00f3n global que WordPress est\u00e1 realizando en cualquier p\u00e1gina que est\u00e9 visitando, tanto en el administrador como en la interfaz. En esta gu\u00eda, veremos qu\u00e9 enlace usar y c\u00f3mo cambiar los argumentos de consulta a su gusto.<\/p>\n<h2>Qu\u00e9 gancho usar<\/h2>\n<p>Primero necesita saber a qu\u00e9 gancho agregar su c\u00f3digo. Necesitamos un gancho que suceda justo despu\u00e9s de que WordPress haya configurado todos los argumentos, pero antes de que se ejecute la consulta real. Para esto usamos la acci\u00f3n <code>pre_get_posts<\/code>.<\/p>\n<p>En este gancho obtienes un par\u00e1metro; que es un <code>WP_Query<\/code>objeto con el que WordPress luego ejecutar\u00e1 la consulta. Realiza cambios en el objeto, pero no necesita devolverlo ya que WordPress ejecutar\u00e1 la consulta con el objeto modificado.<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    \/\/ Add your code here\n});<\/code><\/pre>\n<p>La modificaci\u00f3n de la consulta probablemente requiera que use algunas etiquetas condicionales para especificar los casos en los que desea cambiarla. Por ejemplo, es posible que desee orientar la consulta solo en los resultados de b\u00fasqueda o en las vistas de categor\u00eda.<\/p>\n<h2>Etiquetas condicionales<\/h2>\n<p>WordPress tiene un mont\u00f3n de <a href=\"https:\/\/codex.wordpress.org\/Conditional_Tags\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">etiquetas condicionales<\/a> que puede usar para especificar en qu\u00e9 casos desea agregar su c\u00f3digo. Una etiqueta condicional es simplemente una funci\u00f3n que devuelve verdadero o falso seg\u00fan el estado en el que se encuentre WordPress. Los ejemplos de etiquetas condicionales comunes son <code>is_admin()<\/code>para verificar si actualmente estamos en administraci\u00f3n o interfaz, <code>is_singular()<\/code>si estamos en una sola publicaci\u00f3n o p\u00e1gina en interfaz, y <code>is_search()<\/code>si estamos en la p\u00e1gina de resultados de b\u00fasqueda.<\/p>\n<p>Tenga en cuenta que el enlace <code>pre_get_posts<\/code>se ejecuta tanto para el administrador como para la interfaz. Si solo desea afectar la consulta global en la interfaz, debe envolver su c\u00f3digo dentro de una verificaci\u00f3n if en la etiqueta condicional <code>is_admin()<\/code>.<\/p>\n<h3>Nota sobre las etiquetas condicionales en<code>pre_get_posts<\/code><\/h3>\n<p>Las etiquetas condicionales son geniales y todo eso, pero hay algunas cosas que se deben tener en cuenta cuando se usan dentro de <code>pre_get_posts<\/code>.<\/p>\n<p>En primer lugar, debe familiarizarse con la etiqueta <code>is_main_query()<\/code>. La acci\u00f3n <code>pre_get_posts<\/code>en realidad se ejecuta varias veces para cada carga de p\u00e1gina. Por ejemplo <code>pre_get_posts<\/code>, se ejecuta al generar cada men\u00fa (incluidos los de los widgets). Para modificar la consulta global real, por ejemplo, publicaciones para un archivo de categor\u00eda o resultados de b\u00fasqueda, debe orientar la &quot;consulta principal&quot; usando <code>is_main_query()<\/code>.<\/p>\n<p>En segundo lugar, debe tener en cuenta los casos en los que necesita verificar las etiquetas condicionales en el objeto proporcionado en lugar de llamar a la funci\u00f3n &quot;independientemente&quot;. Por lo general, cuando usa etiquetas condicionales, lo escribir\u00eda as\u00ed:<\/p>\n<pre><code>if (is_main_query()) {\n    \/\/ Do stuff\n}<\/code><\/pre>\n<p>Sin embargo, al usar <code>pre_get_posts<\/code>, hay algunas etiquetas condicionales que debe aplicar al objeto. Por ejemplo:<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    if ($query-&gt;is_main_query()) {\n        \/\/ Add your code here\n    }\n});<\/code><\/pre>\n<p>Siempre debe comprobar <code>is_main_query()<\/code>el objeto proporcionado en <code>pre_get_posts<\/code>. Lea la <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/pre_get_posts\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documentaci\u00f3n de pre_get_posts<\/a> para obtener m\u00e1s informaci\u00f3n.<\/p>\n<p>Este es un ejemplo de c\u00f3mo verificar si no estamos en administraci\u00f3n y si estamos en la consulta de publicaci\u00f3n principal:<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    if (!is_admin() &amp;&amp; $query-&gt;is_main_query()) {\n        \/\/ Add your code here\n    }\n});<\/code><\/pre>\n<h2>Cambiar o agregar argumentos<\/h2>\n<p>Como estamos trabajando con un <code>WP_Query<\/code>objeto, puede <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_query\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">consultar la documentaci\u00f3n de WP_Query<\/a> para saber c\u00f3mo crear sus argumentos para personalizar la consulta de publicaciones. Tenga en cuenta que los argumentos ya est\u00e1n poblados. En ese caso, debe agregar o cambiar los valores existentes. O elimine los que desee eliminar.<\/p>\n<p>Utiliza la <code>set()<\/code>funci\u00f3n en el <code>WP_Query<\/code>objeto para establecer argumentos. El m\u00e9todo acepta dos argumentos, el argumento clave y en segundo lugar el valor. Por ejemplo, establecer el <code>posts_per_page<\/code>argumento se har\u00eda as\u00ed:<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    if (!is_admin() &amp;&amp; $query-&gt;is_main_query()) {\n        $query-&gt;set('posts_per_page', 20);\n    }\n});<\/code><\/pre>\n<p>En los casos en los que desee agregar o cambiar un argumento preexistente, normalmente lo har\u00eda guardando primero el argumento existente en una variable. Puedes usar el m\u00e9todo <code>get()<\/code>para esto. Luego modifica la variable, agregando o fusionando matrices o lo que sea. Y finalmente, usa <code>set()<\/code>para reemplazar la variable modificada nuevamente en el objeto de consulta. Recomiendo usar <code>var_dump()<\/code>en el objeto para ver qu\u00e9 contiene, y esta tambi\u00e9n es una buena manera de verificar si sus etiquetas condicionales son correctas.<\/p>\n<p>Aqu\u00ed hay un ejemplo r\u00e1pido de uso <code>get()<\/code>(simplemente verificando si est\u00e1 vac\u00edo), y si es as\u00ed, agregue sus propios argumentos con <code>set()<\/code>.<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    if (!is_admin() &amp;&amp; $query-&gt;is_main_query()) {\n        if (!$query-&gt;get('meta_query')) {\n            $query-&gt;set('meta_query', [\/ your arguments here \/]);\n        }\n    }\n});<\/code><\/pre>\n<h3>Nota sobre tax_query<\/h3>\n<p>WordPress tiene subclases separadas para manejar la parte de taxonom\u00eda (<code>WP_Tax_Query<\/code>) dentro de <code>WP_Query<\/code>. Si necesita realizar modificaciones de consulta de taxonom\u00eda m\u00e1s complejas, es posible que la <code>pre_get_posts<\/code>acci\u00f3n sea demasiado temprana. Algunos valores pueden estar vac\u00edos porque se completan m\u00e1s tarde. En este caso, es mejor que uses la acci\u00f3n <code>parse_tax_query<\/code>en lugar de <code>pre_get_posts<\/code>. Lea la <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/parse_tax_query\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documentaci\u00f3n de este gancho<\/a> para ver si esto es para usted.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Los argumentos que agrega o cambia dependen completamente de lo que desea hacer, pero ahora deber\u00eda tener una idea de las estrategias para obtener la consulta global. Si necesita obtener informaci\u00f3n sobre el <code>WP_Query<\/code>objeto y c\u00f3mo usar sus argumentos, mi publicaci\u00f3n sobre <a href=\"http:\/\/awhitepixel.com\/blog\/how-to-query-posts-in-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">c\u00f3mo consultar publicaciones<\/a> podr\u00eda ser de su inter\u00e9s.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En este post aprenderemos como modificar la consulta global de WordPress, que hook usar y como modificar los argumentos a nuestro gusto.<\/p>\n","protected":false},"author":1,"featured_media":152576,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,892,831,914,1110,914,831,840,840,861,861],"tags":[1172],"class_list":["post-233644","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-guia-para-principiantes","category-otro","category-n-a","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233644","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=233644"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233644\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/152576"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=233644"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=233644"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=233644"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}