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:
posts_per_page
übereinstimmt.pre_get_posts
ist mir ebenfalls bekannt, aber ich möchte wissen, wo das Problem bei meinem aktuellen Setup liegt. Irgendwelche Ideen?
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.