[Résolu] Articles aléatoires par catégorie (Créer un compte)

  • WordPress :5.4
  • Statut : résolu
15 sujets de 16 à 30 (sur un total de 60)
  • Auteur
    Messages
  • #2355422
    Sabelya
    Participant
    Padawan WordPress
    74 contributions

    Tout simplement parfait !

    Un grand merci.

    #2355738
    Flobogo
    Modérateur
    Maître WordPress
    17042 contributions

    Nickel 🙂

    Ça fait un moment que je n’ai pas plongé les mains dans le code, alors j’ai un peu perdu 😉 Mais c’est souvent par tâtonnement que j’arrive à retrouver le chemin.

    #2371372
    Sabelya
    Participant
    Padawan WordPress
    74 contributions

    Bonjour,

    Je reprends le sujet (manip qui fonctionne très bien) car j’aimerais ajouter une nuance.
    Est-il possible de conserver 1 article en position fixe (1ère position) tandis que tous les autres sont triés de façon aléatoire ?

    Actuellement, j’affiche la catégorie ‘home’ avec les articles concernés sur la page d’accueil, articles triés de façon aléatoire donc :

    <?php
    /* Affichage de la catégorie Home sur la page Accueil */ ?>
    <?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    			query_posts("category_name=home&orderby=rand");
    ?>
    			
    <?php while ( have_posts() ) : the_post(); ?>
    Catégorie Home en page d'Accueil + ordre aléatoire Articles

    J’aimerais avoir une exception sur un article donné qui sera affiché en 1ère position.

    Merci !  🙂

    #2371383
    ferman
    Participant
    Maître WordPress
    3785 contributions

    Bonjour,

    Avez-vous essayé en épinglant l’article que vous voulez voir en tête? Comme query_posts n’est pas la boucle de base je ne sais pas si ça marchera mais c’est vite essayé.

    #2371384
    Sabelya
    Participant
    Padawan WordPress
    74 contributions

    Merci ferman pour votre réponse.

    Oui j’ai essayé mais cela ne fonctionne pas.

    #2371388
    ferman
    Participant
    Maître WordPress
    3785 contributions

    Je m’en doutais un peu mais je ne pouvais pas essayer sur mon site. Cela marche (chez moi) avec la boucle normale (pas query_posts), des articles normaux (pas custom_posts) et le filtre pre_get_posts.

    function au_hasard( $query ) {
    
    	if ( $query->is_home ) {
    		$query->set( 'cat', '9' );
    		$query->set('orderby', 'rand'); 
    		}
    	return $query;
    }
    add_filter( 'pre_get_posts', 'au_hasard' );

    Note: Dans ce cas il faut utiliser le numéro de la catégorie, pas son nom.

    #2371389
    Sabelya
    Participant
    Padawan WordPress
    74 contributions

    Merci ferman, je vais essayer de ce pas.
    Par contre, je ne comprends pas comment est faite l’exception pour l’article à ne pas trier et à garder en position 1.

    #2371390
    ferman
    Participant
    Maître WordPress
    3785 contributions

    L’exception est faite en définissant l’article comme “épinglé” (sticky). Un article épinglé arrive toujours en premier quel que soit le mode d’affichage. Cela si on utilise la boucle “normale”. Query_post remplace toute la boucle normale et donc, apparemment, ça ne marche plus. Avec pre_get_posts, on ne fait que modifier la boucle normale sans la remplacer.

    #2371394
    Flobogo
    Modérateur
    Maître WordPress
    17042 contributions

    Perso, je suis plus à l’aide avec query_post que je trouve plus simple à paramétrer. Il doit y avoir moyen d’exclure les articles “sticky”, mais il faudrait alors 2 boucles successives, l’une pour afficher juste l’article sticky, et la 2ème pour afficher les autres articles (à l’exclusion du sticky), en ordre aléatoire.

    Du coup, la solution de @ferman est beaucoup plus propre. Merci à lui.

    #2371397
    Sabelya
    Participant
    Padawan WordPress
    74 contributions

    Compris, merci.
    Je dois m’y prendre mal, le code remplace uniquement la ligne ‘query_posts’ ?

    #2371404
    ferman
    Participant
    Maître WordPress
    3785 contributions

    Je dois m’y prendre mal, le code remplace uniquement la ligne ‘query_posts’ ?

    Le code remplace toute la fonction responsable de l’affichage  des articles mais comme je ne vois pas ce que vous avez dans le code il est difficile d’en dire plus.

    Edit: Ah non j’y pense juste maintenant: où est le code query post?  dans index.php? La fonction avec pre_get_posts va dans functions.php.

    Donc il faudrait. 1. enlever le code de index.php et 2.mettre l’autre code dans functions.php. Autrement il faudra utiliser une méthode du genre de celle  proposés par @flobogo (2  boucles) .

    • Cette réponse a été modifiée le il y a 2 semaines et 3 jours par ferman.
    • Cette réponse a été modifiée le il y a 2 semaines et 3 jours par ferman.
    #2371407
    Sabelya
    Participant
    Padawan WordPress
    74 contributions

    Il s’agit de index.php du thème enfant.
    Sans les commentaires, uniquement le code ça donne ça, version actuelle :

    <?php
    get_header(); ?>
    	<div id="primary" class="content-area">
    		<main id="main" class="site-main" role="main">
    		<?php if ( have_posts() ) : ?>
    			<?php
    			$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    			query_posts("category_name=home&orderby=rand");
    			?>
    			<?php while ( have_posts() ) : the_post(); ?>
    				<?php
    					get_template_part( 'content', 'home' );
    				?>
    			<?php endwhile; ?>
    			<?php pictorico_paging_nav(); ?>
    		<?php else : ?>
    			<?php get_template_part( 'content', 'none' ); ?>
    		<?php endif; ?>
    		</main><!-- #main -->
    	</div><!-- #primary -->
    <?php get_footer(); ?>
    index.php

    Le num de la catégorie c’est bien son ID ?
    Je ne sais pas où j’ai fait une erreur car cela ne fonctionne pas.

    Merci.

    EDIT :
    Ha oui ok si je comprends bien, il faut passer par function.php pour le code

    • Cette réponse a été modifiée le il y a 2 semaines et 3 jours par Sabelya.
    #2371411
    ferman
    Participant
    Maître WordPress
    3785 contributions

    Ha oui ok si je comprends bien, il faut passer par function.php pour le cod

    Pour le code que je vous ai donné, oui, mais je ne pense pas que ça marchera avec le code query_posts dans index .php. Essayez, vous verrez bien. Autrement il faudra utiliser la méthode de @flobogo. C’est elle qui vous aidera: je n’utilise jamais index.php pour les modifications.

     

     

    #2371419
    Sabelya
    Participant
    Padawan WordPress
    74 contributions

    Merci ferman pour les explications et le code, je vais essayer ça.

    #2371428
    ferman
    Participant
    Maître WordPress
    3785 contributions

    Bonjour,

    Donc j’ai regardé. Si vous utilisez le code que je vous ai passé, il suffit d’enlever de index.php cette partie de code:

    <?php
    			$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    			query_posts("category_name=home&orderby=rand");
    			?>

    et de mettre le code que je vous ai donné dans functions.php (d’un thème enfant?)

    J’ai aussi essayé en conservant  query_post et en faisant deux boucles comme suggéré par @flobogo. Cela fonctionne mais attendez un peu l’avis de @flobogo.

    Cela dépendra de ce que l’une ou l’autre méthode donnera pour la présentation.

15 sujets de 16 à 30 (sur un total de 60)
  • Vous devez être connecté pour répondre à ce sujet.