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

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

    Merci.
    Je viens d’essayer, le MENU disparait et l’article mis en avant ne reste pas en position 1 malgré tout. Il doit y avoir autre chose en relation ?

    #2371430
    ferman
    Participant
    Maître WordPress
    3785 contributions

    Bon, il est impossible de tester dans vos conditions (thème différent et certainement autre chose) donc on ne pourra pas arranger ça sans tâtonner à l’infini.  Il faudra partir de ce qui fonctionne bien (query_post) et mettre une double boucle mais pour ça il faut attendre l’avis de @flobogo.

    #2371431
    Sabelya
    Participant
    Padawan WordPress
    74 contributions

    Très bien, merci.

    #2371449
    ferman
    Participant
    Maître WordPress
    3785 contributions

    Bon, pour gagner du temps je vous passe le code avec Query_post, testé. A part la navigation spécifique au thème (pictorico_paging_nav()), il fonctionne sur mon thème de test, twentyfifteen. Il devrait donc marcher pour vous aussi mais  vu l”expérience d’aujourd’hui je n’en mettrais pas ma main au feu.

    Comme vous voyez, la boucle est dupliquée, chaque boucle ayant des paramètres query_post différents. Une première boucle montre les articles d’une catégorie 1. Cette catégorie ne devra contenir que l’article que vous voulez garder constant. La deuxième boucle est celle que vous avez déjà dans votre index.php. Sauvegardez votre index.php actuel. Si vous avez un message d’erreur (j’espère que non), notez-le. Je n’ai pas mis la balise  <? php au début, juste avant get_header. Si elle est nécessaire remettez là.

    Chez moi category_name=… ne donne pas de résultat satisfaisant, il vaut mieux mettre l’id de la catégorie.

    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("cat=8&orderby=rand"); //catégorie "le nom que vous avez choisi": un seul post.
    			?>
    			<?php while ( have_posts() ) : the_post(); ?>
    				<?php
    					get_template_part( 'content', 'home' );
    				?>
    				
    			<?php endwhile; ?>	 
    			
    			
    			<?php
    			$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    			query_posts("cat=3&orderby=rand"); // catégorie "home"
    			?>
    			<?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(); ?>


    @flobogo
    passera sûrement par ici plus tard et commentera/critiquera si besoin est.

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

    Bien reçu ferman, merci beaucoup, je vais tester cela.

    Sans vouloir vous embêter, suite à une remarque que l’on m’a faite, est-ce qu’il serait possible de rendre l’actuel random des articles conditionné à une session ou au temps (par jour par ex) ou quelque chose du genre ? Est-ce que cela vous semble faisable ?
    Je pense que cela va être compliqué..
    C’est juste que à priori, le fait de modifier à chaque rafraichissement déstabilise certains..  😀

    #2371465
    mathieu42
    Participant
    Maître WordPress
    516 contributions

    cela va déjà être plus compliqué parce que pour que l’affichage des articles reste cohérent, il faudra peut-être que les articles ne soient pas en double quand on change de page ?

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

    Bonsoir,

    Le code de @ferman nécessite de créer une catégorie pour l’article en avant, je ne comprends pas pourquoi. J’ai donc adapté son code (c’est plus long, mais au moins, ça respecte la notion d’ “article sticky”). Le code ci-dessous remplace les lignes 6 à 29 du code de Ferman ci-dessus.

    <?php if ( have_posts() ) : ?>
    		
    			<?php
    			$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    			$args = array(
    				'posts_per_page'      => 1,
    				'post__in'            => get_option( 'sticky_posts' ),
    				'ignore_sticky_posts' => 1,
    			);
    			$query = new WP_Query( $args );
    			<?php while ( have_posts() ) : the_post(); ?>
    				<?php
    					get_template_part( 'content', 'home' );
    				?>
    				
    			<?php endwhile; ?>	
    
    			wp_reset_postdata();
    			
    			
    			<?php
    			$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    			$sticky = get_option( 'sticky_posts' );
    			$args = array(
    				'cat'                 => 3,
    				'ignore_sticky_posts' => 1,
    				'post__not_in'        => $sticky,
    				'paged'               => $paged,
    				'orderby'			  => 'rand',
    			);
    			$query = new WP_Query( $args );
    			?>
    			<?php while ( have_posts() ) : the_post(); ?>
    				<?php
    					get_template_part( 'content', 'home' );
    				?>
    				
    			<?php endwhile; ?>

    Attention 1 : je n’ai pas testé ce code. Conservez une copie du fichier précédent, pour la remettre en place si besoin.
    Attention 2 : ce code (comme celui de Ferman) part du principe que seuls les articles de la catégorie 3 sont affichés. A modifier selon vos besoins. Si j’ai bien compris, c’est pour afficher sur l’accueil, vous avez bien mis ce code dans home.php ?

    Enfin, pour la question de conditionner l’affichage random pendant un temps déterminé, je crois que c’est possible mais il faudrait définir des transients ce qui est bien au-delà de mes “compétences”.


    @mathieu42
    s’y connaît bien mieux que moi en code. Je suis simple utilisatrice de WP, je bidouille, mais je ne suis ni codeuse ni développeuse. Il saura certainement alléger le code ci-dessus, et peut-être aura une idée pour les transients (ou une autre piste)

     

    #2371484
    Sabelya
    Participant
    Padawan WordPress
    74 contributions

    Merci infiniment pour vos réponses. Pas de soucis pour les sauvegardes, je duplique les fichiers sous un autre nom avant modification pour revenir en arrière si besoin.

    @mathieu42, les articles sont classés par catégorie et j’utilise ce système pour réaliser mon Menu. Le tri aléatoire est paramétré uniquement sur la page d’accueil, catégorie Home. Je n’ai pas compris la fin de votre phrase, article en double ?

    @flobogo, actuellement, je n’utilise plus les fichiers categorie.php car je n’ai que la catégorie Home qui est concerné. J’ai donc juste remplacé

    query_posts("category_name=home&paged=$paged");

    par

    query_posts("category_name=home&orderby=rand");

    dans le fichier index.php de mon thème enfant.

    Je n’ai pas encore essayer le dernier code de @ferman, et donc votre modification. Je vais faire les essais là, merci.

    #2371486
    ferman
    Participant
    Maître WordPress
    3785 contributions

    Bonjour,

    Un des deux codes fonctionnera, j’espère, ou les deux comme ça vous pourrez choisir.  Pour le code de @flobogo il s’est glissé deux petites erreurs (Attention 1 : je n’ai pas testé ce code.). J’ai donc essayé.

    Il faut faire les deux corrections suivantes:

    < ?php endwhile; ? >
    wp_reset_postdata();

    par

    < ?php endwhile;
    endif;
    wp_reset_postdata();
    ? >

    et mettre un  ? > après  “$query = new WP_Query( $args );” dans la première boucle.

    Les deux codes donnent le même résultat de manière un peu différente.

    #2371496
    Sabelya
    Participant
    Padawan WordPress
    74 contributions

    Bonjour,

    Bon, je n’y suis pas arrivé, au mieux j’ai une duplication de Posts à la suite, sans random (j’utilise le code dans le fichier index.php du thème enfant).
    La catégorie Home porte l’ID 29.
    Je ne comprends pas exactement ce que représente l’ID 1 dans le code, car cela correspond à ma catégorie par défaut qui existe.
    Il me semble que le ‘endif’ est mal placé dans le code ? J’ai modifié en conséquence, je me trompe certainement.
    Ci-joint le fichier en question si jamais.

    Sinon ce n’est pas grave, merci de votre aide.

    <?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;
    			$args = array(
    				'posts_per_page'      => 1,
    				'post__in'            => get_option( 'sticky_posts' ),
    				'ignore_sticky_posts' => 1,
    			);
    			$query = new WP_Query( $args );
    			?>
    			
    			<?php while ( have_posts() ) : the_post(); ?>
    				<?php
    				get_template_part( 'content', 'home' );
    				?>
    			<?php endwhile; ?>
    			
    			<?php wp_reset_postdata(); ?>		
    			
    			<?php
    			$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    			$sticky = get_option( 'sticky_posts' );
    			$args = array(
    				'cat'                 => 29,
    				'ignore_sticky_posts' => 1,
    				'post__not_in'        => $sticky,
    				'paged'               => $paged,
    				'orderby'			  => 'rand',
    			);
    			$query = new WP_Query( $args );
    			?>
    			
    			<?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(); ?>

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

    Vous n’avez pas tenu compte des rectifications indiquées par @ferman pour corriger mon code. La 1ère boucle n’est donc pas finie correctement.

    Ci-dessous le code rectifié :

    <?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;
    			$args = array(
    				'posts_per_page'      => 1,
    				'post__in'            => get_option( 'sticky_posts' ),
    				'ignore_sticky_posts' => 1,
    			);
    			$query = new WP_Query( $args );
    			?>
    			
    			<?php while ( have_posts() ) : the_post(); 
    				get_template_part( 'content', 'home' );
    				?>
    			<?php endwhile; 
    				 endif; 		
    				wp_reset_postdata(); 
    			?>	
    
    		<?php if ( have_posts() ) : ?>
    			
    			<?php
    			$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    			$sticky = get_option( 'sticky_posts' );
    			$args = array(
    				'cat'                 => 29,
    				'ignore_sticky_posts' => 1,
    				'post__not_in'        => $sticky,
    				'paged'               => $paged,
    				'orderby'			  => 'rand',
    			);
    			$query = new WP_Query( $args );
    			?>
    			
    			<?php while ( have_posts() ) : the_post(); ?>
    				<?php
    				get_template_part( 'content', 'home' );
    				?>
    			<?php endwhile; 
    				endif; 		
    				wp_reset_postdata();
    			?>
    
    			<?php pictorico_paging_nav(); ?>
    
    		<?php else : ?>
    			<?php get_template_part( 'content', 'none' ); ?>
    			
    		<?php endif; ?>
    
    		</main><!-- #main -->
    	</div><!-- #primary -->
    
    <?php get_footer(); ?>

    Mais pas sûr que ce soit encore tout à fait ça.

    Par ailleurs, j’ai lu une petite note qui précise que lorsque c’est sur la page d’accueil, il ne faut pas utiliser (‘paged’) mais (‘page’)

    Et surtout, je répète : si c’est uniquement sur l’accueil, vous ne devriez pas inclure ce code dans index.php mais dans front-page.php (si c’est une page statique) ou dans home.php si elle n’affiche que des articles.
    En utilisant index.php, les 2 mêmes boucles définies ci-dessus se réaliseront aussi sur la ou les pages de catégorie. Et puisque vous avez une catégorie “home”, la page de catégorie sera identique à la page d’accueil, ce qui ne plaît pas à Google.

    #2371510
    Sabelya
    Participant
    Padawan WordPress
    74 contributions

    J’ai tenu compte des modifications mais cela n’affichait qu’une page blanche, j’ai donc essayé de faire différemment à plusieurs reprises sans succès.
    Avec le nouveau code, que ce soit avec index.php, front-page.php ou home.php, le résultat est le même, également une page blanche.

    Ne vous embêtez pas plus, merci beaucoup pour votre temps et votre aide, je vais me contenter de ce que j’ai. L’idéal par la suite serait de faire un random conditionné mais effectivement cela risque d’être encore plus compliqué..

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

    @ferman ou @mathieu42 auront peut-être une solution plus propre, ou verront peut-être comment rectifier si mon code est erroné.

    #2371526
    ferman
    Participant
    Maître WordPress
    3785 contributions

    Et le code avec query_posts ne marche pas non plus? Je l’ai essayé et réessayé  et réessayé encore. Chez moi ça fonctionne à tous les coups. Bon: pre_get_posts fonctionnait aussi (avec le thème twentyfifteen) donc c’est vraiment bizarre.

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

    Alors je viens de re tenter votre solution @ferman , avec la fonction de tri aléatoire à mettre dans le fichier functions.php, en faisant attention, maintenant que je comprends un peu mieux. Cela fonctionne SUPER  :), j’avais du rater qq chose la 1ère fois, mais le Menu disparait en haut de la page comme précédemment. A moins qu’il faille placer le code à une certaine position dans functions.php ?

    Merci !

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