[Résolu] Archive taxonomie : ordre alphabétique (Créer un compte)

  • WordPress :5.8
  • Statut : résolu
  • Ce sujet contient 8 réponses, 4 participants et a été mis à jour pour la dernière fois par ferman, le il y a 19 secondes.
9 sujets de 1 à 9 (sur un total de 9)
  • Auteur
    Messages
  • #2389375
    Loraga
    Participant
    Chevalier WordPress
    119 contributions

    Ma configuration WP actuelle

    • Version de PHP/MySQL : 7.4 / 5.6.50
    • Thème utilisé : Thème fait maison
    • Extensions en place : BilletWeb API, Contact Form 7, Disable Core Block Patterns, Gallery Custom Links, Mailjet for WordPress, MetaSlider, PublishPress Checklists, Redirection, User Role Editor, WP Maintenance Mode, Yoast SEO
    • Nom de l’hébergeur : ovh
    • Adresse du site : https://salondemusique13.fr

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

    Bonjour à tous,

    J’ai créé sur ce site un custom post type “concerts itinérants”, qui représente en fait un catalogue de concerts particuliers. Ces concerts itinérants disposent pour l’instant de deux catégories distinctes (Spectacles jeune public et Créations chœurs d’élèves).

    Du côté du site web, j’affiche directement les deux pages d’archives de ces deux catégories, ce qui permet de lister tous les évènements de chacune de ces catégories exactement comme des articles, et c’est le résultat voulu :

    Archive Spectacles Jeune Public
    Archive Créations chœurs d’élèves

    J’aimerais maintenant pouvoir classer ces concerts par ordre alphabétique (de leur titre). Ils sont par défaut classé par leur date de publication, en ordre inverse (exactement comme les articles).

    J’ai testé plusieurs solutions, notamment des extensions :

    Hélas, rien n’a fonctionné pour classer automatiquement par ordre alpha (j’ai l’impression que ça ne fonctionne que pour les posts, et pas pour les archives (taxonomies) de ces posts)

    J’ai également testé de filtrer la sortie avec le fichier functions.php, mais ça n’a pas fonctionné non plus :

    add_filter( 'posts_orderby' , 'sdm_cpt_order' );
    
    function sdm_cpt_order( $orderby ) {
    	global $wpdb;
    	
    	// Check if the query is for an archive
    	if ( is_archive() && get_query_var("post_type") == "concertsitinerants" ) {
    		// Query was for archive, then set order
    		return "$wpdb->posts.post_title ASC";
    	}
    	
    	return $orderby;
    }

    Je crois que quelque chose m’échappe sur ce point… Ce que je cherche à faire ne me semble pas si compliqué que ça, et pourtant…

    Avez-vous des solutions à proposer ou une idée pour me mettre sur la voie ?

    Merci d’avance pour l’aide apportée 🙂

    #2389386
    Lumiere de Lune
    Participant
    Maître WordPress
    19732 contributions

    Je ne sais pas trop, a priori les plugins annoncent fonctionner sur n’importe quel type de custom post type.

    ton url contient “cat-concerts-itinerants” à quoi cela correspond il ? La catégorie mère ? Si c’est le post type et que tu utilises un truc pour avoir ce genre d’url, attention, les query vars peuvent être un peu bizarres, je te conseillerais au minimum de faire passer la catégorie avant le custom post type

    #2389409
    Loraga
    Participant
    Chevalier WordPress
    119 contributions

    “concerts-itinerants” correspond au custom post type, “cat-concerts-itinerants” correspond à une taxonomie de ce CPT, sa catégorie du coup oui 🙂

    Pour les afficher, j’utilise le template ‘taxonomy-categoriesconcertsitinerants.php’. D’ici, j’ai essayé en vain de modifier les paramètres de la query mais sans succès. Je trouve d’ailleurs très peu d’infos sur mon souci : comment ordonner une liste de posts d’une taxonomie. D’habitude, je galère pas autant à trouver ce genre d’infos dans la communauté WordPress ^^

    #2389410
    Lumiere de Lune
    Participant
    Maître WordPress
    19732 contributions

    Dans ce cas, je crois qu’à titre exceptionnel, il faut modifier WP Query directement dans ton template (ou quand même essayer avec get_posts avant …)

    Regarde la documentation dans le codex, tu peux utiliser tous les paramètres du monde pour la sélection et l’order

    #2389420
    mathieu42
    Participant
    Maître WordPress
    910 contributions

    vous pouvez essayer cela :

    add_action("pre_get_posts", function ($wp_query) {
    	
    	if (!empty($wp_query->query_vars["cat-concerts-itinerants"])) {
    		
    		$wp_query->query_vars["orderby"] = [
    			"post_title" => "ASC",
    		];
    		
    	}
    	
    	
    });

    l’effet secondaire est que dans l’espace d’administration, les concerts seront aussi triés par titre si vous affichez les concerts d’une catégorie.

    #2389421
    mathieu42
    Participant
    Maître WordPress
    910 contributions

    j’ai l’impression que le code dans l’url n’est pas le code interne de la catégorie.

    si le code interne est “categoriesconcertsitinerants” vous devrez mettre cela à la place de “cat-concerts-itinerants” dans mon code.

    #2389429
    ferman
    Participant
    Maître WordPress
    4603 contributions

    Bonjour,

    Je ne sais pas si ça vous sera utile (je n’ai pas de cpt autre que les produits) mais ça fonctionne avec les produits (et bien sûr avec les posts “normaux”)

    
    function alphabetic( $query) {
    	
        if ( !is_admin() && $query->is_main_query() && is_product_category("ma-categorie")) :
    		
            $query->set( 'orderby', 'post_title' );
            $query->set( 'order', 'asc' );
    		endif;
        
    }
    add_action( 'pre_get_posts', 'alphabetic' );

    C’est adapté de CECI.

    EDIT avec deux categories : “is_product_category(array(“ma-categorie-1”, “ma-categorie-2″))”

    • Cette réponse a été modifiée le il y a 22 heures et 7 minutes par ferman.
    #2389506
    Loraga
    Participant
    Chevalier WordPress
    119 contributions

    @mathieu42 : Merci infiniment ! Ça fonctionne ! J’ai fait tellement de tests que je ne me souviens plus, mais je pense avoir merdé sur le $query->set.
    Je vais adapter ton code pour utiliser l’attribut “ordre”, qu’on peut définir dans l’interface admin si on fait en sorte que le CPT le supporte (parce que, finalement, l’ordre alpha, ce n’est pas idéal on m’a dit ^^)
    Je vais pouvoir me débrouiller en tout cas, merci !


    @Ferman
    :Merci pour ton aide (toujours présent Ferman 🙂 ) ! La fonction is_product_category est à mon avis une fonction liée à Woocommerce, que je n’utilise pas sur ce projet. Du coup, chez moi, ça donnera une erreur undefined function

    #2389518
    ferman
    Participant
    Maître WordPress
    4603 contributions

    Merci pour ton aide (toujours présent Ferman 🙂 ) ! La fonction is_product_category est à mon avis une fonction liée à…

    Bien sûr! C’était juste pour montrer que ça fonctionnait avec le seul “custom-post” dont je disposais. Comme je le disais ça marche aussi avec is_category  (en utilisant post_type = post). Je n’ai pas eu le temps ni le courage de créer spécialement un CPT  pour tester  🙁 mais ça devrait aussi fonctionner; enfin,  je pense mais comme je n’ai pas testé… En fait le principe est le même que pour @Mathieu42:  l’important est l’utilisation de pre_get_post.

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