Zeigen Sie je nach Kontext eine unterschiedliche Anzahl von Beiträgen pro Seite an (z. B. Homepage, Suche, Archiv).

21

In den Leseeinstellungen können Sie die Anzahl der angezeigten Beiträge festlegen, die sich auf die Anzahl der in allen Kontexten angezeigten Beiträge auswirkt. Ich möchte stattdessen eine bestimmte Anzahl von Beiträgen auf der Homepage und eine andere Anzahl von Beiträgen auf Seiten wie Archiv, Suchergebnissen usw. anzeigen.

Leseeinstellungen-Blog-Seiten-zeigen-höchstens-pro-Seite

Ich erkenne, dass ich dies tun könnte, indem ich die Themendateien bearbeite und die Abfrageparameter dort ändere, aber ich würde einen einfacheren Zugriff auf eine einfache Einstellungsseite vorziehen. Vor langer Zeit bin ich auf ein Plugin gestoßen, das dies getan hat, aber ich kann es jetzt nicht finden.

Kennt jemand ein Plugin, um dies zu tun, oder sogar eine Funktion, die ich in die Datei functions.php einfügen könnte, um dasselbe zu erreichen?

Doug
quelle
Sie haben wahrscheinlich an @ chip- bennetts Plugin 'Different Posts Per Page' gedacht : chipbennett.net/plugins/cbnet-different-posts-per-page, das auf grafische Weise das macht, was Sie wollen.
Tom Auger

Antworten:

23

Ich glaube, die beste Möglichkeit, dies in einem Plugin zu tun, besteht darin, die folgende Beispielfunktion auszuführen, wenn der pre_get_postsAktions-Hook gefunden wird. Das $wp_queryObjekt ist verfügbar, was bedeutet, dass Ihre bedingten Tags verfügbar sind, aber bevor WordPress die Beiträge erhält, bedeutet dies, dass Sie die Abfragevariablen ändern, bevor die erste Abfrage ausgeführt wird, anstatt eine zweite Abfrage hinzuzufügen, wie wenn query_posts () in einem Thema verwendet wird Datei.

function custom_posts_per_page($query) {
    if (is_home()) {
        $query->set('posts_per_page', 8);
    }
    if (is_search()) {
        $query->set('posts_per_page', -1);
    }
    if (is_archive()) {
        $query->set('posts_per_page', 25);
    } //endif
} //function

//this adds the function above to the 'pre_get_posts' action     
add_action('pre_get_posts', 'custom_posts_per_page');
kevtrout
quelle
Ich benutze diese Funktion auf meiner eigenen Seite. Es war einfach, es hier für Sie auszuschneiden und einzufügen.
Kevtrout
0

Sie können eine benutzerdefinierte Schleife mit query_posts ausführen und die Anzahl der Posts nach is_home, is_archive usw. angeben.

Nur eine einfache if-Anweisung zusammen mit query_posts

chrismccoy
quelle
Ja, das habe ich in meiner Frage erwähnt. Ich suche nach einer Möglichkeit, dies zu tun, damit ich nicht mehrere Designdateien bearbeiten muss, um die Einstellungen zu ändern. Vielen Dank.
Doug
1
Es ist eine ziemlich schlechte Idee, das so zu machen. WordPress führt bereits eine Abfrage aus. Wenn Sie query_postsIhr Thema eingeben, werden Sie die ursprüngliche Abfrage ignorieren und eine weitere, redundante Abfrage erstellen.
Krzysiek Dróżdż
-1

Hinzufügen zu dieser Frage. Weiß jemand, wie man post_per_page für diese Funktionsfunktion custom_posts_per_page ($ query) ermittelt, wenn man die neue Seite wie folgt zu index.php hinzufügt:

<?php
if ($_GET['new'] == 1) 
{
    include ( TEMPLATEPATH . '/newpage.php' );
    exit;
}
?>
glazsasha
quelle
-1

Ich erkenne, dass ich dies tun könnte, indem ich die Themendateien bearbeite und die Abfrageparameter dort ändere, aber ich würde einen einfacheren Zugriff auf eine einfache Einstellungsseite vorziehen.

Der Vollständigkeit halber habe ich festgestellt, dass die query_postsKombination mit der $query_stringVerkettung gut funktioniert.

Ich habe diesen Code eingefügt index.php(mein Theme hat keine category.php) ...

<?php 
if (!is_front_page()) { 
    query_posts($query_string . "&posts_per_page=20"); 
}
?>

Natürlich ändern wir hier die interne Abfragezeichenfolge der Schleife und überschreiben die Standardanzahl der Beiträge pro Seite .

Es ist ein Vergnügen, eine kleinere Liste von Posts auf der Homepage bereitzustellen, auf der ich vollständige Posts zeige, und eine viel größere Liste von Posts an allen anderen Stellen (Kategorien, nach Datum usw.), an denen ich nur Post-Zusammenfassungen zeige.

Beachten Sie jedoch, dass die Abfrage anders als bei der akzeptierten Antwort zweimal ausgeführt wird. Dies ist also keine so gute Lösung.

Jeff Atwood
quelle
Jeff, ich suchte nach einem zentralen Ort, um die Anzahl der in verschiedenen Kontexten zurückgegebenen Posts zu kontrollieren. Ihre Antwort tut dies nur, wenn Sie index.php verwenden, um ALLE Kontexte zu behandeln, was die meisten Themen nicht tun. Zusätzlich zur Erhöhung der Aufrufe der Datenbank (die sich auf die Leistung auswirken) kann Ihre Technik auch die Reaktion auf bedingte Tags (z. B. is_home () oder is_front_page) auf unerwartete Weise ändern. Wenn Sie einer Seite sekundäre Schleifen hinzufügen möchten, sollten Sie NICHT query_posts verwenden, sondern stattdessen "new WP_Query" (oder get_posts).
Doug
@doug das ist keine sekundäre Schleife, es überschreibt die Hauptschleife - und ja, dieses spezielle Thema verwendet index.php, um alles zu rendern, es ist ziemlich minimalistisch. Ich hatte das Gefühl, dass dies hier als Antwort sinnvoller ist, aber wenn Sie möchten, kann ich meine eigene Frage stellen und sie beantworten, wenn diese Antwort Sie in irgendeiner Weise beleidigt.
Jeff Atwood
Eigentlich habe ich Ihren vorletzten Absatz falsch verstanden und dachte, die "größeren" und "kleineren" Listen der Beiträge befänden sich auf derselben Seite, so dass mein letzter Satz oben irrelevant war. Und ja, es ist absolut legitim, Ihren gesamten Code in index.php abzulegen, wenn Sie möchten. Und wenn dies der Fall ist, ist Ihre Methode eine schnelle und einfache Möglichkeit, dies zu tun. Ich werde meine Ablehnung entfernen, nachdem die 20-Stunden-Sperre vorbei ist. Trotzdem ist es aus den bereits genannten Gründen (von Ihnen, mir und dem WP-Codex) weniger wünschenswert, eine neue Abfrage zu senden, anstatt die ursprüngliche Abfrage wie in der Antwort von kevtrout zu ändern.
Doug