La paginación con tipos de publicaciones personalizados da como resultado 404 problemas

2

Tengo un index.php muy simple:

<div id="content">
  <? get_template_part('content', get_post_format()) ?>
</div>

<div id="pagination">
  <? previous_posts_link() ?>
  <? next_posts_link() ?>
</div>

Y mi content.php se parece aproximadamente a esto:

<?
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
query_posts([
  'post_type' => ['articles', 'projects', 'tips'],
  'orderby' => 'date',
  'posts_per_page' => 7,
  'paged' => $paged
]);
?>

<? while(have_posts()): the_post() ?>
  <article class="post">
    <h2><? the_title() ?></h2>
    <p><? the_excerpt() ?></p>
    <ul>
      <? foreach($categories as $cat): ?>
      <li class="category"><a href="#"><?= $cat->name ?></a></li>
      <? endforeach ?>
    </ul>
  </article>
<? endwhile ?>

Hay 14 publicaciones en total, pero las "siguientes" publicaciones siempre están redirigiendo a 404 en /page/2 en lugar de mostrar las 7 publicaciones restantes.

Editar: Si uso un WP_Query personalizado en lugar de query_posts , los enlaces siguiente y anterior ni siquiera se mostrarán. enlace

He estado tratando de encontrar una solución a este problema desde ayer. Soy consciente de todas las otras preguntas similares a esta, pero para mi configuración particular, ninguna de las soluciones que encontré funcionó, incluyendo:

  • enlace
  • enlace
  • Asegúrese de que "Las páginas de blogs se muestran como máximo" coincidan con posts_per_page

También soy consciente de pre_get_posts pero me gustaría saber cuál es el problema con mi configuración actual. ¿Alguna idea?

    
pregunta elclanrs 13.02.2013 - 01:12

1 respuesta

4

Cuando llegas a la plantilla, WordPress ya ha consultado la base de datos y ha decidido qué mostrar en función de esos resultados.

Está viendo un error 404 porque, según la consulta principal predeterminada, no hay más publicaciones que mostrar.

Cuando llama a query_posts en la plantilla, sobrescribe la consulta original. A pesar de que los resultados de su consulta nueva contienen más publicaciones, WordPress no tiene conocimiento de esta consulta modificada.

Es por esto que nunca debe usar query_posts en la plantilla . Ya ha proporcionado la solución a su problema, use la acción pre_get_posts para modificar la consulta principal antes sucede.

    
respondido por el Milo 13.02.2013 - 01:48

Lea otras preguntas en las etiquetas