{"id":231109,"date":"2022-12-22T18:19:00","date_gmt":"2022-12-22T15:19:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231109"},"modified":"2022-12-07T10:45:59","modified_gmt":"2022-12-07T07:45:59","slug":"paginacion-de-tipo-de-publicacion-personalizada-de-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/paginacion-de-tipo-de-publicacion-personalizada-de-wordpress\/","title":{"rendered":"Paginaci\u00f3n de tipo de publicaci\u00f3n personalizada de WordPress"},"content":{"rendered":"<p>En t\u00e9rminos generales, cada vez que trabajo con paginaci\u00f3n de tipo de publicaci\u00f3n personalizada, lo hago escribiendo una consulta personalizada usando <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_query\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Query<\/a> y luego llamando a <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_reset_postdata\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_reset_postdata()<\/a> al final de <a href=\"https:\/\/developer.wordpress.org\/themes\/basics\/the-loop\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">The Loop<\/a>.<\/p>\n<p>Sigo pensando que esto tiene su lugar, pero hay una soluci\u00f3n m\u00e1s simple que puede implementar utilizando un gancho espec\u00edfico que proporciona WordPress.<\/p>\n<p>Espec\u00edficamente, estoy hablando del gancho <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/pre_get_posts\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pre_get_posts<\/a>. En la referencia del c\u00f3digo, puede ver que esto se define como:<\/p>\n<blockquote>\n<p>Se activa despu\u00e9s de que se crea el objeto de la variable de consulta, pero antes de que se ejecute la consulta real.<\/p>\n<\/blockquote>\n<p>Y dado que la consulta contiene mucha informaci\u00f3n, podemos continuar y usarla para determinar si queremos modificar los argumentos necesarios para lidiar con la paginaci\u00f3n.<\/p>\n<p>Con esto, quiero decir que debemos observar la propiedad <strong>post_type<\/strong> y el valor <strong>posts_per_page<\/strong>. Para ello, puedes implementarlo de <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1e69ad55ecdb13424a66253c7d7aa4df#file-00-pre-get-posts-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la siguiente manera<\/a> :<\/p>\n<pre><code>&lt;?php\n\nuse WP_Query;\n\nadd_action('pre_get_posts', __NAMESPACE__. 'customPostTypePagination');\n\/**\n * If we're on the 'acme-post-type' page, then adjusts pagination so there are only two posts per page. This will \n * affect pagination so we can use built-in pagination links to easily page through the content.\n *\n * @param WP_Query the instance of the query object that contains information to populate the template.\n *\n * @return WP_Query an unmodified version of the query object or a modified version if we're on the acme post-type.\n *\/\nfunction customPostTypePagination(WP_Query $query)\n{\n  if (isset($query-&gt;query['post_type']) &amp;&amp; 'acme-post-type' == $query-&gt;query['post_type']) {\n    $query-&gt;set('posts_per_page', 2);\n  }\n}<\/code><\/pre>\n<p>El c\u00f3digo anterior no est\u00e1 orientado a objetos (si lo fuera, configurar\u00eda un suscriptor y una clase responsable de manejar la l\u00f3gica en la funci\u00f3n), pero puede ver c\u00f3mo configurarlo en su forma m\u00e1s b\u00e1sica.<\/p>\n<p>Entonces, si est\u00e1 trabajando con paginaci\u00f3n de tipo de publicaci\u00f3n personalizada y no desea lidiar con los diversos aspectos de la configuraci\u00f3n de una consulta personalizada, esto puede resolver su problema.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si est\u00e1 trabajando con paginaci\u00f3n de tipo de publicaci\u00f3n personalizada y no desea tratar con una consulta personalizada, esto puede funcionar.<\/p>\n","protected":false},"author":1,"featured_media":235807,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,716,831,861],"tags":[1172],"class_list":["post-231109","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-guia-para-principiantes","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231109","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=231109"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231109\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/235807"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=231109"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=231109"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=231109"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}