Frage

Ich würde gerne eine single-post auf meiner vorderen Seite (immer das neueste), aber lassen Sie normalen paging-Arbeit.So dass die vordere Seite hat post 1, ist die nächste Seite sollte post 2-11 (1-10 ist auch in Ordnung), dann 12-21 oder 11-20 und so weiter.Ich weiß, ich kann ändern der Anzahl der Beiträge, je nach Kontext, aber wenn dieser Wert auf "1" auf der homepage bedeutet, dass die weiteren Seiten zeigen auch nur einen post.

Mein Hauptproblem ist, dass /page/2/ und so weiter arbeiten, aber /page/1/ immer leitet auf die eigentliche Homepage, /.Dies bedeutet, dass Beiträge 2-10 sind immer übersprungen, da Seite 2 zeigt, 11-20.Ich aktuell dies lösen, indem Sie die Verknüpfung zu meinem Archiv, aber dies ist nicht ideal, wenn Sie kommen, um die ersten Beiträge des Jahres und es werden immer weniger Beiträge und keine offensichtliche Möglichkeit der Weiterbildung.

War es hilfreich?

Lösung

Ich habe es verwendet das offset Abfrageparameter. Dadurch konnte ich die Abfrage in der bearbeiten pre_get_posts Haken und scheint der sauberste Weg zu sein, dies ohne eine neue Frage zu tun. Jetzt zeigt die Startseite nur einen Beitrag und page/2/ Zeigt Beiträge 2-11 an. Alle Links funktionieren weiter, es ist keine andere Änderung erforderlich.

add_action('pre_get_posts', 'set_offset_on_front_page');
function _set_offset_on_front_page(&$query)
{
    if (is_front_page() && is_paged()) {
            $posts_per_page = isset($query->query_vars['posts_per_page']) ? $query->query_vars['posts_per_page'] : get_option('posts_per_page');
            // If you want to use 'offset', set it to something that passes empty()
            // 0 will not work, but adding 0.1 does (it gets normalized via absint())
            // I use + 1, so it ignores the first post that is already on the front page
            $query->query_vars['offset'] = (($query->query_vars['paged'] - 2) * $posts_per_page) + 1;
    }
}

Andere Tipps

Ok, vielleicht ist dies eine seltsame oder komplizierte Art, dies zu tun, aber ich hatte ein ähnliches Problem (ich wollte einen willkommenen Text und die drei neuesten Beiträge einer bestimmten Kategorie auf der Titelseite zeigen. Also habe ich es getan:

  1. Erstellt eine neue Seite namens Home und legte meinen Willkommenstext darauf.
  2. Deaktiviert die Standard -Homepage und setzen Sie meine benutzerdefinierte Homepage als Startseite
  3. Erstellt eine neue (kopierte und modifizierte) Seitenvorlage
    1. Lassen Sie es den Seitenkörper anzeigen
    2. Laden Sie drei neueste Beiträge der Kategorie X und zeigen Sie sie an
    3. Haben Sie einen Link "mehr" darunter, der auf/Kategorie/Kategorie-X/verlinkt

sieht aus wie das: http://hinek.de (Seite ist in Deutsch, sorry)

Wenn dies der Weg für Sie sein könnte und Sie mehr Infos oder ein Code -Beispiel für die Seitenvorlage benötigen, Kommentar und ich werde diesen Beitrag bearbeiten.

Ich nehme an, Sie sind die Ausführung von Wordpress 3.0.x?

Nur ein post (in welcher Kategorie) auf der front-Seite ist einfach.Verwenden query_posts('post_per_page=1') in Ihrem home.php - Datei anstelle der Berufung get_template_part('loop').

Folgen Sie den normalen paging-Methoden nach, dass ist ein bisschen schwieriger.In Ihrem loop.php Datei, schlage ich vor, putting <?php global $paged; ?> vor der <?php if (have_posts()) : ?> Erklärung und Verwendung der $paged variable und query_posts() Funktion ändern Sie Ihre Abfrage so zeigt es die rechten Pfosten.

Ihre loop.php - Datei würde etwa so Aussehen (beachten Sie:nicht getestet):

<?php
global $paged;

if (!is_front_page() && $paged && $post->post_type == 'post') :
    query_posts('posts_per_page=10&paged=' . ($paged - 1));
    if (have_posts()) :
        while (have_posts()) : the_post();
        // Rest of the loop
        endwhile;
    endif;
endif;
?>

Ich verwendet $paged - 1 einfach, weil Seite 2 wird, zeige Artikel 1 - 10, und page-3 wird, zeige Artikel 11 - 20, und so weiter.

Diese Frage ist etwas alt, aber für diejenigen, die dies in der modernen Zeit finden, sollten Sie niemals anrufen query_posts. Aus dem WordPress -Codex:

query_posts () ist übermäßig einfach und problematisch, um die Hauptabfrage einer Seite zu ändern, indem sie durch neue Instanz der Abfrage ersetzt wird. Es ist ineffizient (Runs SQL-Abfragen erneut) und scheitert unter bestimmten Umständen (insbesondere bei der Bearbeitung von Posts Pagination).

...

Tl; dr verwendet niemals query_posts () jemals;

Stattdessen sollten Sie die verwenden pre_get_posts haken in functions.php wie folgt:

function hwl_home_pagesize( $query ) {
    // Behave normally for secondary queries
    if ( is_admin() || ! $query->is_main_query() )
        return;

    if ( is_home() ) {
        // Display only 1 post for the home page
        $query->set( 'posts_per_page', 1 );
        return;
    }

    // Otherwise, use whatever is set in the Wordpress Admin screen
    $query->set( 'posts_per_page', get_option('posts_per_page'); );
}
add_action( 'pre_get_posts', 'hwl_home_pagesize', 1 );

Achten Sie jedoch darauf, dass in einigen Fällen (z. B. das Anpassen von Post -Offsets) mit a pre_get_posts Haken kann Ihre Pagination merkeln. Das beheben ist nicht super-hard, aber es ist etwas, das man sich bewusst ist. Es gibt ein Beispiel dafür, wie man dies behebt hier.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top