- WordPress :5.4
- Statut : résolu
- Ce sujet contient 59 réponses, 4 participants et a été mis à jour pour la dernière fois par
ferman, le il y a 2 jours et 11 heures.
-
AuteurMessages
-
5 octobre 2020 à 23 h 45 min #2355422
Tout simplement parfait !
Un grand merci.
8 octobre 2020 à 23 h 34 min #2355738Nickel 🙂
Ç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.
5 mars 2021 à 16 h 59 min #2371372Bonjour,
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 ArticlesJ’aimerais avoir une exception sur un article donné qui sera affiché en 1ère position.
Merci ! 🙂
5 mars 2021 à 17 h 59 min #2371383Bonjour,
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é.
5 mars 2021 à 18 h 06 min #2371384Merci ferman pour votre réponse.
Oui j’ai essayé mais cela ne fonctionne pas.
5 mars 2021 à 18 h 46 min #2371388Je 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.
5 mars 2021 à 18 h 55 min #2371389Merci 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.5 mars 2021 à 19 h 04 min #2371390L’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.
5 mars 2021 à 19 h 35 min #2371394Perso, 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.
5 mars 2021 à 19 h 40 min #2371397Compris, merci.
Je dois m’y prendre mal, le code remplace uniquement la ligne ‘query_posts’ ?5 mars 2021 à 21 h 02 min #2371404Je 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) .
5 mars 2021 à 21 h 23 min #2371407Il 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.phpLe 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.
5 mars 2021 à 22 h 41 min #2371411Ha 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.
6 mars 2021 à 10 h 39 min #2371419Merci ferman pour les explications et le code, je vais essayer ça.
6 mars 2021 à 12 h 50 min #2371428Bonjour,
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.
-
Cette réponse a été modifiée le il y a 2 semaines et 3 jours par
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.