Question

Je voudrais avoir un seul poste sur ma page d'accueil (toujours la dernière), mais laisser le travail de pagination normale. Donc, la première page a 1 message, la page suivante devrait avoir après 2-11 (1-10 est très bien aussi), puis 12-21 ou 11-20, et ainsi de suite. Je sais que je peux modifier le nombre de messages en fonction du contexte , mais la définition de cette « 1 » sur les moyens d'accueil des pages supplémentaires montrent également qu'un seul poste.

Mon principal problème est que /page/2/ et ainsi de suite des travaux, mais /page/1/ redirige toujours à la vraie page d'accueil, /. Cela signifie messages 2-10 sont toujours ignorés, depuis la page 2 montre 11-20. Je actuellement résoudre ce problème en liant à mes archives, mais ce n'est pas idéal quand vous venez à les premiers postes de l'année et il y a moins de messages et pas de façon évidente de continuer.

Était-ce utile?

La solution

I résolu à l'aide de le paramètre de requête de offset . Cela m'a permis de modifier la requête dans le crochet de pre_get_posts, et semble être la plus propre façon de faire, sans une nouvelle requête. Maintenant, les spectacles de la page d'accueil un seul post, et page/2/ spectacles messages 2-11. Tous les liens I'ÉCROU, aucune autre modification est nécessaire.

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;
    }
}

Autres conseils

Ok, peut-être c'est une façon étrange ou compliqué à faire, mais j'eu un problème similaire (je voulais afficher un texte de bienvenue et les trois nouveaux postes d'une catégorie spécifique sur la première page Je l'ai fait.

  1. créé une nouvelle page appelée la maison et mettre mon texte de bienvenue à ce sujet.
  2. Désactivé la page d'accueil par défaut et définir ma page d'accueil personnalisée comme page de démarrage
  3. A créé un nouveau (copié et modifié un existant) modèle de page
    1. laissez afficher le corps de la page
    2. charge trois nouveaux postes de la catégorie X et les afficher
    3. ont un lien "plus" au-dessous que les liens sur / catégorie / catégorie x /

ressemble à ceci: http://hinek.de (page est en allemand, désolé)

Si cela pourrait être le moyen pour vous et vous avez besoin de plus d'infos ou un exemple de code pour le modèle de page, un commentaire et je vais modifier ce message.

Je suppose que vous êtes en cours d'exécution 3.0.x Wordpress?

Pour afficher un seul poste (dans la catégorie quelle que soit) sur la première page est facile. Utilisez query_posts('post_per_page=1') dans votre fichier home.php au lieu d'invoquer get_template_part('loop').

Pour suivre les méthodes de recherche de personnes normales après cela est un peu délicat. Dans votre fichier loop.php, je suggère de mettre <?php global $paged; ?> avant l'instruction <?php if (have_posts()) : ?>, et en utilisant la variable $paged et la fonction query_posts() pour modifier votre requête afin qu'il affiche les messages droite.

Votre fichier loop.php ressemblerait à quelque chose comme ceci (note: non testé):

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

J'utilisé $paged - 1 simplement parce que la page 2 affichera les messages 1 - 10, et page 3 affichera les messages 11 -. 20, etc.

Cette question est un peu vieux, mais pour ceux qui trouvent cela à l'époque moderne, vous ne devriez jamais appeler query_posts . De codex Wordpress:

  

query_posts () est trop simpliste et problématique façon à modifier principale   requête d'une page en le remplaçant par nouvelle instance de la requête. Il est   inefficace (re-exécute des requêtes SQL) et carrément échouer dans certains   circonstances (en particulier souvent lorsqu'ils traitent avec paginations postes).

     

...

     

TL; DR ne pas utiliser query_posts () jamais;

Au lieu de cela, vous devez utiliser le crochet pre_get_posts dans functions.php comme suit:

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 );

Cependant, méfiez-vous que dans certains cas, (comme le réglage des décalages de poste), à ??l'aide d'un crochet pre_get_posts peut mutiler votre pagination. Fixation ce n'est pas super dur, mais il est quelque chose à être au courant. Il y a un exemple de la façon de résoudre ce problème .

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top