[Résolu] Empêcher l’affichage d’articles de la même catégorie (Créer un compte)

  • WordPress :5.4
  • Statut : résolu
15 sujets de 1 à 15 (sur un total de 24)
  • Auteur
    Messages
  • #2356379
    Vito
    Participant
    Padawan WordPress
    75 contributions

    Bonjour,

    Ma configuration WP actuelle : 5.5.1.

    • Version de PHP/MySQL : PHP 7.4/MySQL 5.7
    • Thème utilisé : Thème enfant Magever
    • Extensions en place :

    Akismet Anti-Spam
    Classic Editor
    Coming Soon Page
    Contact Form 7
    Cookie Notice
    iThemes Security
    Jetpack par WordPress.com
    Loco Translate
    MailPoet 3
    MailPoet 3 Premium
    Post Expirator
    reCaptcha by BestWebSoft
    Recent Posts Widget With Thumbnails
    Sassy Social Share
    UpdraftPlus – Sauvegarde/Restauration
    WP-Optimize – Clean, Compress, Cache
    WPS Cleaner
    Yoast SEO

    Problème(s) rencontré(s) :

    Chaque jour, je publie un texte, une sorte de pensée du jour que j’ai nommé “Paroles d’en Haut“. Je souhaite que les visiteurs puissent lire ce texte même avec un retard de quelques jours. Mais pour l’instant ce n’est pas le cas, car si je ne supprime pas l’article de la veille et ceux des jours précédents ils vont tous venir s’afficher sur la page d’accueil en tant qu’articles récents (voir copie d’écran).

    Je possède l’extension Mailpoet avec laquelle j’envoie ce texte aux abonnés, et aussi tout nouvel article du site, mais seulement avec un extrait pour obliger les personnes à se rendre sur le site pour consulter les publications. Je ne peux pas envoyer ce texte complet, bien qu’il ne soit pas très long, sinon je serai contraint d’envoyer tous les nouveaux articles en entier aussi, ce que je ne veux surtout pas.

    Donc, mon souci est que je veux que ces “Paroles d’en Haut” apparaissent sur la page d’accueil, comme tous les articles récents, cependant, si je ne supprime pas celles des jours précédents elles vont toutes s’afficher sur la page d’accueil en tant qu’articles récents. Les visiteurs ne verront plus les vignettes des autres articles que j’ai publiés, car les vignettes des “Paroles d’en Haut” les masqueront par leurs présences puisque ce sont les articles les plus récents.

    Ma question est donc la suivante :

    – Comment puis-je faire pour qu’il n’y ait que la dernière “Paroles d’en Haut” qui s’affiche sur la page d’accueil et permettre ainsi l’affichage des autres articles récents ? Ce qui permettrait de ne pas supprimer les “Paroles d’en Haut” précédentes, les visiteurs pourront de cette façon les lire même plusieurs jours plus tard.

    J’espère m’être bien expliqué. Merci pour votre aide.

    Cordialement.

    Vito

    Fichiers joints :
    Vous devez être connecté pour voir les fichiers joints.
    #2356476
    ferman
    Participant
    Maître WordPress
    3217 contributions

    Bonjour,

    Je ne vois pas trop bien le problème: quand vous créez une nouvelle “parole d’en haut”, vous pouvez “désépingler” la /les précédentes et elles reprendront un comportement classique dans la liste de vos articles, sans avoir  priorité sur les articles normaux.

    #2356508
    Vito
    Participant
    Padawan WordPress
    75 contributions

    Bonjour,

    Non malheureusement, car il s’agit d’articles récents qui apparaissent dans l’ordre chronologique de parution et non pas d’articles épinglés. Et je ne peux pas choisir, c’est bien là le problème.

    Donc, comme les “Paroles d’en Haut” sont très souvent les articles les plus récents, puisqu’ils sont publiés chaque jour, ce sont eux qui s’affichent en premier. Ces petits articles priment dans l’affichage du blog, ce sont eux que l’on voit d’abord, c’est pourquoi je suis contraint de supprimer celui de la veille à chaque fois.

    Je vous mets une copie d’écran où l’on voit un seul post de “Paroles d’en Haut” parce que j’ai supprimé les autres, alors que dans la copie d’écran que je vous ai mis dans mon premier message il y a “TROIS” articles de “Paroles d’en Haut” parce que je n’avais pas supprimé les précédents. Je vous joins cette copie d’écran également.

    Merci.

    Cordialement,

    Vito

    Fichiers joints :
    Vous devez être connecté pour voir les fichiers joints.
    #2356518
    ferman
    Participant
    Maître WordPress
    3217 contributions

    Dans ces conditions c’est simple: vous allez dans article-> modifier et vous mettez une date de publication antérieure. L’article sera renvoyé en arrière. Vous pouvez même en choisissant bien dates et heures de publication regrouper toutes vos “paroles d’en haut”.

    • Cette réponse a été modifiée le il y a 1 mois par ferman.
    #2356529
    Vito
    Participant
    Padawan WordPress
    75 contributions

    Heu oui, c’est une solution.

    Cependant cela ne coïncidera pas avec les dates de publications réelles et les dates d’envois que les abonnées recevront. S’ils cliquent sur “Lire la suite…” sur le mail qu’ils recevront, qui se trouvent au bas de l’extrait, ne serait-ce que deux jours plus tard, ils tomberont sur la page d’erreur 404. Enfin, c’est ce que je pense. Et en plus Google va m’ennuyer en m’indiquant qu’il y a un problème sur mon site.

    D’autre part cela va me demander une manipulation quotidienne pour changer les dates, poufffff… Pas envie ! 🙂

    S’il y avait une modification à effectuer dans un fichier pour empêcher qu’une même catégorie, celle de “Paroles d’en Haut” en l’occurrence, apparaissent plusieurs fois dans les articles récents ça m’arrangerait beaucoup mieux.

    Merci.

    #2357433
    Flobogo
    Modérateur
    Maître WordPress
    16413 contributions

    Bonjour,

    Je comprends que modifier manuellement tous les jours, ce ne soit pas la solution idéale.

    Je vois 2 pistes :

    • la plus simple, si votre configuration le permet (si “pensées d’en haut” est une catégorie d’articles) : le thème permet d’afficher les articles d’une ou plusieurs catégories à un endroit, et d’autres catégories sur un autre endroit de la page d’accueil. Vous pourriez afficher les articles “pensées d’en haut” à un endroit, et les autres articles ailleurs.
      A noter qu’en termes de référencement – SEO, ce n’est pas bon de répéter la même liste d’articles à différents endroits, surtout sur la même page!
    • l’autre solution, un peu plus complexe, c’est en effet de modifier dans le thème-enfant le fichier index.php ou home.php qui gère l’affichage des articles en page d’accueil. Il faudrait placer une 1ère boucle affichant uniquement le dernier élément de “pensées d’en haut”, puis une 2ème boucle pour afficher tous les autres articles (hors “pensées d’en haut”)

    Pour cette 2ème solution, si ça vous intéresse, vous pouvez vous aider des conseils et exemples ici et dans le Codex.

     

    #2357582
    Vito
    Participant
    Padawan WordPress
    75 contributions

    Bonjour <span class=”bbp-author-name”>Flobogo</span>,

    Oui, effectivement ce n’est pas la solution idéale.

    • Pour ce qui concerne la 1<sup>ère</sup> piste j’ai compris. Cependant, j’ai quatre catégories et je ne peux afficher en haut que trois catégories seulement. En dessous se trouve des vignettes de tous les articles dans un ordre chronologique, et comme la catégorie « Paroles d’en Haut » est celle où de petit articles sont publiés quotidiennement ils apparaissent tous en premier sur la page d’accueil. Si je laisse ces articles pour que les visiteurs puissent s’y référer même quelques jours plus tard on ne verra que les articles de la catégorie « Paroles d’en Haut » s’afficher en première page. Il faut donc que je trouve moyen de ne pas afficher toutes les « Paroles d’en Haut », mais au possible la dernière seulement, sachant que les autres pourront être visible en cliquant sur le bouton « Paroles d’en Haut », ce qui nous amène à votre deuxième piste.

     

    • Pour cette 2<sup>e</sup> piste vous avez vu juste, c’est bien ce que je souhaiterai avoir. Je me suis rendu sur les deux liens que vous m’avez donné (naxialis.com et developer.wordpress.org), mais c’est un peu difficile pour moi, sauf si on me dit ce que je dois écrire dans le fichier index.php. Je vais tenter de voir de nouveau à tête reposée, si j’y arrive je reviendrai vous en faire part. Toutefois, si vous savez ce que je dois insérer dans ce fichier j’en serai ravis.

     

    Voici le fichier index.php dans le thème parent newsever :

    <?php
    /**
     * The main template file
     *
     * This is the most generic template file in a WordPress theme
     * and one of the two required files for a theme (the other being style.css).
     * It is used to display a page when nothing more specific matches a query.
     * E.g., it puts together the home page when no home.php file exists.
     *
     * @link https://developer.wordpress.org/themes/basics/template-hierarchy/
     *
     * @package Newsever
     */
    
    get_header(); ?>
        <section class="section-block-upper af-container-block-wrapper clearfix">
    
            <div id="primary" class="content-area">
                <main id="main" class="site-main">
                    <!--<div class="af-container-row">-->
    
    				<?php
    				if ( have_posts() ) :
    
    					if ( is_home() && ! is_front_page() ) : ?>
                            <header>
                                <h1 class="page-title screen-reader-text"><?php single_post_title(); ?></h1>
                            </header>
    
    					<?php
    					endif;
    
    					//div wrap start
                            do_action('newsever_archive_layout_before_loop');
    					?>
                        <!--<div class="af-container-row aft-archive-wrapper clearfix <?php /*echo esc_attr( $archive_class ); */?>">-->
    
    						<?php while ( have_posts() ) : the_post();
    
    							/*
    							 * Include the Post-Format-specific template for the content.
    							 * If you want to override this in a child theme, then include a file
    							 * called content-___.php (where ___ is the Post Format name) and that will be used instead.
    							 */
    
    							get_template_part( 'template-parts/content', get_post_format() );
    
    
    						endwhile;
    					//div wrap end
    						do_action('newsever_archive_layout_after_loop');
    
    						?>
    
    				<?php
    
    				else :
    					get_template_part( 'template-parts/content', 'none' );
    
    				endif; ?>
    
                    <!--</div>-->
                </main><!-- #main -->
                <div class="col-1">
                    <div class="newsever-pagination">
    					<?php newsever_numeric_pagination(); ?>
                    </div>
                </div>
            </div><!-- #primary -->
    
    		<?php
    		get_sidebar();
    		?>
    
        </section>
    <?php
    get_footer();
    index.php

    Merci pour votre aide 🙂

    #2358096
    Flobogo
    Modérateur
    Maître WordPress
    16413 contributions

    J’ai regardé le thème. Je ne suis pas sûre du template utilisé, je ne sais même pas si c’est la page “blog” ou si c’est une page d’accueil statique. Comme je n’avais pas envie de passer tout mon WE sur cette question, j’ai pensé à une autre solution :

    • vous téléchargez et activez l’extension WP News and scrolling Widget ainsi que l’extension Post Type Switcher
    • vous modifiez le nom des “News” en “Pensées d’en haut” (slug conseillé : pensees )
    • vous transformez vos Articles de la catégories “pensées d’en haut” en publications  de type “pensées”
    • vous pourrez alors afficher uniquement vos “pensées” dans un widget de votre choix, dans la sidebar, et/ou même dans une page dédiée où vous placerez le shortcode voulu
    • et ainsi, vous n’aurez plus que vos articles ordinaires des autres catégories dans le contenu de l’accueil
    #2358286
    ferman
    Participant
    Maître WordPress
    3217 contributions

    Bonjour,

    Après avoir pas mal expérimenté, il y a peut-être une possibilité de faire ce que vous souhaitez avec la fonction ci-dessous. Chez moi ça marche (avec votre thème) mais comme je ne peux évidemment pas tester sur votre site, je ne peux pas garantir à 100%. Le code fait disparaître tous les articles de la classe choisie (“pensées d’en haut” pour vous) sauf le dernier. En cliquant sur la catégorie, on a accès à tous les articles de la catégorie. Si ça marche , c’est valable jusqu’à 1000 “paroles d’en haut”.

    prerequis: remplacer la valeur 9 (id de ma catégorie test par  l’id de la catégorie “paroles d’en haut”).

    Ce code est à mettre de préférence dans le fichier “functions.php” d’un thème enfant. Si vous n’en avez pas c’est facile à créer avec l’extension “Child theme configurator“. Si vous ne voulez pas en créer vous pouvez utiliser l’extension “my custom functions“. C’est simple mais lisez les FAQ et surtout ça: “Q. What to do if this plugin crashed the website?” qui vous dit comment rétablir la situation en cas de problème (pas grave et facilement réparable  par FTP). Il vaut mieux éviter de mettre des codes dans functions.php du thème parent: ce sera effacé lors de la prochaine mise à jour du thème. Bien sûr on peut remettre le code après mais c’est un peu pénible, surtout si vous envisagez de mettre d’autres codes dans l’avenir.

    $paroles = get_posts( array('category' => 9));    
    $paroles_ids=(wp_list_pluck( $paroles, 'ID' ));
    $parole_recente=array_slice( $paroles_ids, 1, 1000);
     
    function derniere_parole( $query ) {
    	global $parole_recente;
    	if (is_home()){
    	$query->set('post__not_in', $parole_recente );
    	}
    	return $query;
    }
    add_filter( 'pre_get_posts', 'derniere_parole' );

     

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

    Bonjour Flogobo,

    J’ai été fort occupé ces derniers jours, mais c’est un réel plaisir de lire vos aides. J’apprécie l’aide de tous sur ce support WordPress. Je vois que Ferman m’a également proposé une solution.

    Dès que j’aurai un moment je vais vous lire posément vos solutions et prendre celle qui sera la plus simple pour moi.

    Merci beaucoup Flogobo.

    Cordialement,

    Vito

    #2358317
    Vito
    Participant
    Padawan WordPress
    75 contributions

    Bonjour Ferman,

    Merci encore pour votre aide. Comme je le disais à Flobogo dès que j’aurais un moment je vais lire vos propositions et voir celle qui me paraîtra la plus à même de répondre à ce que je recherche.

    Pour infos c’est un thème enfant que je possède, il se nomme Magever. C’est le thème enfant de Newsever.

    Merci beaucoup. Si cela fonctionne comme souhaité je mettrai le sujet en résolu. Dans le cas contraire je reviendrai vous dire ce qu’il en est.

    Cordialement,

    Vito

    #2358322
    ferman
    Participant
    Maître WordPress
    3217 contributions

    Bonjour,

    J’avais essayé avec newsever. Je viens d’essayer avec magever. Cela ne fait pas de différence. Par curiosité, pourquoi avez vous pris magever au lieu de newsever? Ils me semblent très proches, au moins pour ce qui est de la page d’accueil. Je crois, sans en être absolument sûr, qu’il y a certains inconvénients à utiliser un thème enfant préparé. On ne peut pas créer de thème enfant de thème enfant et donc les personnalisations sont faites dans magever (et non dans un thème enfant de magever). Si magever est mis à jour  alors les modifications seront effacées (c’est ce dont je ne suis pas sûr: avez vous déjà fait des personnalisations dans magever sans problème?) alors qu’un thème enfant “normal”, fait par vous même n’est jamais mis à jour et ce problème n’existe pas.

    #2358401
    Vito
    Participant
    Padawan WordPress
    75 contributions

    Ferman,

    Au départ j’avais créé un thème enfant de Newsever. Mais, je ne sais pas pourquoi je n’ai pu l’installer. J’ai fait plusieurs tentatives d’installations qui se sont avérées infructueuses. Je n’ai pas insisté sachant que le créateur de Newsever a créé un thème enfant de ce dernier, qu’il a nommé Magever, et qui est son frère jumeau point par point, c’est pourquoi je me suis tourné vers ce dernier.

    Newsever a déjà eu des mises à jour, sans que cela vienne perturber le thème enfant (Magever). Magever, quant à lui n’a jamais eu de mise à jour. J’ai d’ailleurs fait certaines modifications dans ce thème enfant, notamment dans les fichiers suivants : style.css ; functions.php ; header.php et single.php, que j’ai envoyé par FTP.

    Donc, pas de problème pour ce qui concerne ce thème enfant qui ne risque pas d’être modifié. Si à l’avenir ce devait être le cas je me tournerai aussitôt sur la solution de recréer un thème enfant de Newsver et de l’installer.

    🙂

    #2358402
    ferman
    Participant
    Maître WordPress
    3217 contributions

    Parfait, je m’étais renseigné de mon côté auprès de collègues et apparemment ça dépend des thèmes.

    #2358413
    Vito
    Participant
    Padawan WordPress
    75 contributions

    Ferman,

    Je viens d’essayer de mettre le code proposé dans le fichier function.php en prenant soin de remplacer le chiffre 9 par le texte du nom de la catégorie “Paroles d’en haut” comme sur le code ci-dessous, mais une ligne de code d’erreur s’est affiché à la place de la page qui était toute blanche.

    $paroles = get_posts( array('category' => paroles d'en haut));    
    $paroles_ids=(wp_list_pluck( $paroles, 'ID' ));
    $parole_recente=array_slice( $paroles_ids, 1, 1000);
     
    function derniere_parole( $query ) {
    	global $parole_recente;
    	if (is_home()){
    	$query->set('post__not_in', $parole_recente );
    	}
    	return $query;
    }
    add_filter( 'pre_get_posts', 'derniere_parole' );

    Ensuite, j’ai changé le texte par le nom de Slug de la catégorie, soit “paroles-den-haut” comme le code ci-dessous :

    $paroles = get_posts( array('category' => paroles-den-haut));    
    $paroles_ids=(wp_list_pluck( $paroles, 'ID' ));
    $parole_recente=array_slice( $paroles_ids, 1, 1000);
     
    function derniere_parole( $query ) {
    	global $parole_recente;
    	if (is_home()){
    	$query->set('post__not_in', $parole_recente );
    	}
    	return $query;
    }
    add_filter( 'pre_get_posts', 'derniere_parole' );

    et ça ne fonctionne pas non plus. J’obtiens un code d’erreur juste au-dessus de la page web, qui est celui-ci :

    Warning: Use of undefined constant paroles – assumed ‘paroles’ (this will throw an Error in a future version of PHP) in /homepages/36/d824371106/htdocs/wp-content/themes/magever/functions.php on line 51

    Warning: Use of undefined constant den – assumed ‘den’ (this will throw an Error in a future version of PHP) in /homepages/36/d824371106/htdocs/wp-content/themes/magever/functions.php on line 51

    Warning: A non-numeric value encountered in /homepages/36/d824371106/htdocs/wp-content/themes/magever/functions.php on line 51

    Warning: A non-numeric value encountered in /homepages/36/d824371106/htdocs/wp-content/themes/magever/functions.php on line 51

    Warning: Use of undefined constant haut – assumed ‘haut’ (this will throw an Error in a future version of PHP) in /homepages/36/d824371106/htdocs/wp-content/themes/magever/functions.php on line 51

    Warning: A non-numeric value encountered in /homepages/36/d824371106/htdocs/wp-content/themes/magever/functions.php on line 51

    🙂

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