usuario una son nueva mostrar lugar las fuente fragmento etiquetas entrada cómo cuáles cuales completa añadir wordpress pagination

wordpress - una - ¿cuáles son las etiquetas en wp?



La función de paginación no funciona en WordPress (4)

A pesar de seguir exactamente el ejemplo en el códice , la página a la que llegué cuando hace clic en el next enlace de paginación ( http: // localhost: 3000 / my_project / news / page / 2 / ) no existe ("página no encontrada").

¿Por qué?

$paged = (get_query_var(''paged'')) ? get_query_var(''paged'') : 1; echo ''paged = '' . $paged; $regular_posts = new WP_Query(''posts_per_page=3&paged='' . $paged); while ($regular_posts->have_posts()): $regular_posts->the_post(); the_title(); endwhile; echo get_next_posts_link(''Older Entries'', $regular_posts->max_num_pages);

Este código está contenido en mi plantilla "home.php", gestionando la página "Noticias" que creé en el panel de control y configurada como "Página de publicaciones" en "Configuración de lectura".


Una página de inicio estática es ligeramente diferente de un archivo, ya que es un parámetro de page lugar de paged .

La página de Paginación del Codex incluye este código para páginas de inicio estáticas, que en realidad funcionará en todos los casos (es decir, incluso en páginas de archivo) porque está buscando ambos parámetros:

if ( get_query_var( ''paged'' ) ) { $paged = get_query_var( ''paged'' ); } elseif ( get_query_var( ''page'' ) ) { $paged = get_query_var( ''page'' ); } else { $paged = 1; }

Pero si solo lo necesita para trabajar en la página principal, también debería funcionar el cambio de su código para la variable $ paged a lo siguiente:

$paged = (get_query_var(''page'')) ? get_query_var(''page'') : 1;


Puedes poner este código en el archivo function.php,

function pagination($pages = '''', $range = 4) { $showitems = ($range * 2) + 1; global $paged; if (empty($paged)) $paged = 1; if ($pages == '''') { global $wp_query; $pages = $wp_query->max_num_pages; if (!$pages) { $pages = 1; } } if (1 != $pages) { echo "<div class=/"fl-w-left main-pagination/">"; if ($paged > 2 && $paged > $range + 1 && $showitems < $pages) echo "<a href=''" . get_pagenum_link(1) . "''>&laquo; First</a>"; if ($paged > 1 && $showitems < $pages) echo "<a href=''" . get_pagenum_link($paged - 1) . "''>&lsaquo; Previous</a>"; echo ''<ul>''; for ($i = 1; $i <= $pages; $i++) { if (1 != $pages && (!($i >= $paged + $range + 1 || $i <= $paged - $range - 1) || $pages <= $showitems )) { echo ($paged == $i) ? "<li class=/"active/">" . $i . "</li>" : "<a href=''" . get_pagenum_link($i) . "''>" . $i . "</a>"; } } echo ''</ul>''; if ($paged < $pages && $showitems < $pages) echo "<a href=/"" . get_pagenum_link($paged + 1) . "/">Next &rsaquo;</a>"; if ($paged < $pages - 1 && $paged + $range - 1 < $pages && $showitems < $pages) echo "<a href=''" . get_pagenum_link($pages) . "''>Last &raquo;</a>"; echo "</div>/n"; }}

Además, coloque este código en su página o archivo de plantilla posterior,

<?php if (function_exists("pagination")) { ?> <?php pagination($post_query->max_num_pages); ?> <?php } ?>


Cambiar $wp_query->posts_per_page en la plantilla con una nueva instancia de WP_Query no funciona porque el número de página solicitado ya ha sido validado contra $wp_query->max_num_pages por WordPress antes de que se ejecute la plantilla. Como la página solicitada es superior a este valor para la consulta principal, en su 404.php se sirve la plantilla 404.php y su código en la plantilla home.php ni siquiera se ejecuta.

El truco es conseguir $wp_query->max_num_pages para que coincida con el número máximo de páginas real mediante la manipulación de la consulta principal para utilizar sus argumentos personalizados, antes de realizar la consulta principal. $wp_query->posts_per_page y $wp_query->found_posts coincidirá con sus resultados, lo que resulta en $wp_query->max_num_pages que también lo hace.

La mejor manera, en mi opinión, es editar los argumentos principales de la consulta antes de que la consulta principal obtenga sus publicaciones. Por ejemplo, puede agregar lo siguiente a las funciones de su tema.php:

function custom_main_query($query){ if(is_admin()) return; if(!$query->is_main_query()) return; if(is_home()) $query->set(''posts_per_page'', 3); } add_action(''pre_get_posts'', ''custom_main_query'');

Esto significará que un bucle estándar también funcionará en la caja:

// Standard loop while (have_posts()) : the_post(); the_title(); endwhile; // Navigation links previous_posts_link(''Newer Entries''); next_posts_link(''Older Entries'');

Si solo está manipulando la cantidad de publicaciones por página, puede ser mejor cambiar las publicaciones predeterminadas por página yendo a Options => Reading en el administrador de WordPress y, en su lugar, configurar las Blog pages show at most a 3 aquí.


Este error generalmente ocurre debido a los límites establecidos en la cantidad de publicaciones para mostrar en sus plantillas. Es posible que esto esté configurado a menos de 4. Así que vaya a su tablero de WordPress y vaya a Settings->Reading . Busque que las páginas del blog muestren como máximo y si el valor es menor que 4, increméntelo al número total de publicaciones que se mostrarán en su plantilla, más el enlace de paginación (en su caso, esto debería ser al menos 4).