wake-up-neo.com

Die Paginierung mit benutzerdefinierten Beitragstypen führt zu 404 Problemen

Ich habe einen sehr einfachen index.php:

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

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

Und mein content.php sieht ungefähr so ​​aus:

<?
$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 ?>

Es gibt insgesamt 14 Beiträge, aber die "nächsten" Beiträge leiten immer zu einem 404 auf /page/2 um, anstatt die verbleibenden 7 Beiträge anzuzeigen.

Bearbeiten: Wenn ich anstelle von WP_Query einen benutzerdefinierten query_posts verwende, werden die nächsten und vorherigen Links nicht einmal angezeigt. https://Gist.github.com/elclanrs/4782705

Ich habe seit gestern versucht, eine Lösung für dieses Problem zu finden. Ich kenne alle anderen ähnlichen Fragen, aber für meine spezielle Konfiguration hat keine der Lösungen funktioniert, die ich gefunden habe, einschließlich:

pre_get_posts ist mir ebenfalls bekannt, aber ich möchte wissen, wo das Problem bei meinem aktuellen Setup liegt. Irgendwelche Ideen?

2
elclanrs

Wenn Sie die Vorlage erreichen, hat WordPress die Datenbank bereits abgefragt und basierend auf diesen Ergebnissen entschieden, was angezeigt werden soll.

Es wird ein 404-Fehler angezeigt, da aufgrund der Standard-Hauptabfrage keine weiteren Beiträge angezeigt werden können.

Wenn Sie in der Vorlage query_posts aufrufen, überschreiben Sie diese ursprüngliche Abfrage. Trotz der Tatsache, dass Ihre neu Abfrageergebnisse mehr Beiträge enthalten, hat WordPress keine Kenntnis von dieser geänderten Abfrage.

Deshalb solltest du niemals query_posts in der Vorlage verwenden . Sie haben die Lösung für Ihr Problem bereits bereitgestellt. Verwenden Sie die Aktion pre_get_posts , um die Hauptabfrage bevor zu ändern.

4
Milo