web-dev-qa-db-fra.com

Comment afficher 3 boucles différentes sur 3 colonnes sur la page d'accueil

J'ai fait quelques recherches sur ce sujet, mais rien que j'ai trouvé jusqu'à présent ne répond vraiment à ma question. Je sais qu'il y a plusieurs façons de s'y prendre, mais je recherche la méthode qui sera la plus propre et la plus stable.

Ce que j'aimerais faire, c'est que trois ensembles différents de messages soient affichés sur ma page d'accueil. Chaque groupe de messages affichera une catégorie différente avec un nombre différent des derniers messages affichés. Deux d’entre eux occuperont le même espace dans la zone de contenu "principale", avec des liens "onglets" permettant aux utilisateurs de choisir l’affichage à afficher à tout moment. Le troisième sera affiché dans une barre latérale à droite. Aucun des groupes de messages ne doit être paginé, car après l'affichage du nombre X de messages le plus récent, je vais simplement avoir un lien vers "lire plus", qui conduira l'utilisateur à la page d'archivage de catégories spécifique.

Il y a deux solutions possibles que j'ai rencontrées mais je ne sais pas laquelle serait la meilleure ou si l'une ou l'autre est une bonne option.

  1. Définissez une page de garde statique et créez un modèle de page personnalisé que je peux configurer avec les trois boucles différentes requises.

  2. Définissez la page d'accueil sur "Derniers messages" et modifiez la boucle par défaut affichée.

Jusqu'à présent, j'ai facilement mis en place le groupe de messages "Sidebar". Ce ne sont que les deux principaux groupes de postes qui me posent problème.

Toute direction à ce sujet serait grandement appréciée. J'ai lu des articles sur le sujet des boucles multiples, mais rien ne s'applique suffisamment à ma situation pour me donner une idée précise de ce que je devrais faire.

Merci d'avance.

1
JLW

Il existe une troisième option, créer un fichier de modèle front-page.php. Elle est similaire à votre option n ° 1, sauf que l'option n ° 1 vous permet de créer une page au sein de l'administrateur et que, dans votre cas, cela ne vous semble pas nécessaire. L'option n ° 1 est plus appropriée lorsque vous souhaitez également gérer une partie du contenu de la page d'accueil dans un éditeur standard, plutôt que dans le thème.

Si vous n'avez pas déjà de thème enfant, commencez par en créer un. Copiez ensuite front-page.php si le thème en contient un. Dans le cas contraire, vous devrez peut-être parcourir la hiérarchie pour voir quel fichier contrôle réellement la page d'accueil de votre thème. Copiez-le dans le thème de votre enfant, puis ajustez-le si nécessaire. Étant donné que vous avez déjà une boucle prise en charge dans la barre latérale, vous pouvez utiliser la boucle principale/par défaut pour le deuxième ensemble et ajouter un wp_query pour le troisième ensemble.

Ainsi, par exemple, où votre fichier de thème actuel a la boucle -

if ( have_posts() ) :
    while ( have_posts() ) : the_post();
        // This inner part of the Loop varies by theme
        the_content();
    endwhile;
endif;

Remplacez cette partie par votre propre code - votre balisage variera, mais j'espère que cela illustre comment vous pouvez configurer votre code HTML pour les onglets, puis placer les deux boucles à l'intérieur:

<div class="row container">
    <div class="left column">
        <?php
        // Your standard Loop goes here
        if ( have_posts() ) :
            while ( have_posts() ) : the_post();
                // Format as desired
                the_content();
            endwhile;
        endif;
        ?>
    </div>
    <div class="right column">
        <?php
        // This is where you create an additional Loop
        $args = array(
            'post_type' => 'post',
            'category_name' => 'your-category', // change to your category
            'posts_per_page' => 5 // change to the total you want to display
        );
        // run the query
        $thirdLoop = new WP_Query($args);
        // Now this looks mostly like a normal Loop:
        if($thirdLoop->have_posts()):
            while ( have_posts() ) : the_post();
                // Format as desired
                the_content();
            endwhile;
        endif;
    </div>
</div>

À partir de là, vous voudrez faire quelques choses: personnalisez la catégorie de votre troisième boucle et le nombre de messages que vous souhaitez afficher; personnalisez la sortie HTML des deux boucles et la sortie plus d'informations telles que the_title() et the_permalink() pour créer un lien vers chaque message et ne pas afficher uniquement leur contenu; vous pouvez également vouloir personnaliser la requête principale, mais c'est un sujet qui lui est propre. Recherchez un article WPSE sur pre_get_posts pour personnaliser la requête principale sur la page d'accueil. Vous pourrez ainsi le limiter à la catégorie que vous souhaitez afficher dans cette boucle, ainsi que limiter le nombre total d'articles.

2
WebElaine