afficher l’archive des Custom Post Type

  • Statut : non résolu
15 sujets de 1 à 15 (sur un total de 29)
  • Auteur
    Messages
  • #559410
    Flobogo
    Modérateur
    Maître WordPress
    15229 contributions

    Bonjour,

    Ma configuration WP actuelle
    Version de WordPress : 4.4.1
    Version de PHP/MySQL : 5.5.12 / 5.6.17
    Thème utilisé : Air Balloon – Child
    Thème URI : http://www.mon-coin-de-bourgogne.fr
    Extensions en place : Akismet (3.1.7), Autoptimize (2.0.0), Basic Google Maps Placemarks (1.10.5), Category Tag Pages (1.0), Cocorico Social (1.2.1), Conditional CAPTCHA (3.7.1), Contact Form 7 (4.3.1), Forum_wordpress_fr (4.0), Gwolle Guestbook (1.6.0), Links Shortcode (1.8.1), MMWW (1.0.6), PS Auto Sitemap (1.1.9), Really Simple CAPTCHA (1.8.0.1), Rocket Lazy Load (1.0.4), RSS Includes Pages (3.4), Slideshow (2.3.1), TinyMCE Advanced (4.2.8), WordPress Database Backup (2.3.0), WP-Optimize (1.8.9.10), Yoast SEO (2.3.5)
    Adresse du site : http://localhost/


    Nom de l’hébergeur : local avec WAMP

    Contexte :
    Mon site en ligne fonctionne avec des pages qui ont des catégories et des étiquettes, grâce au plugin Category Tag Pages. Afin de mieux coller au fonctionnement de WordPress, je prépare localement un transfert de ces pages vers un Custom Post Type.

    Problème(s) rencontré(s) :
    J’ai donc créé mon CPT ‘Visites’ –> OK
    J’ai créé une Taxonomie « Types de Visites » (slug = type) avec les termes Châteaux / Églises … –> OK

    Je voudrais afficher une « page » (un contenu) avec la liste de toutes les Visites, triées par « type de visites ».
    J’ai créé un fichier taxonomy.php et même un fichier taxonomie-type.php.
    J’ai suivi ce tuto : https://wpchannel.com/creer-page-archive-custom-taxonomies-wordpress/

    Mais rien à faire :fire: J’ai beau ré-enregistrer mes permaliens, modifier les réglages de Yoast SEO, j’arrive toujours sur une page 404 avec localhost/wptestbourg/type-de-visites

    #1042997
    Li-An
    Modérateur
    Maître WordPress
    21070 contributions

    Il faudrait que tu nous donnes le code de génération des CPT. Et évidemment c’est taxonomy-truc.php 🙂

    #1042998
    Flobogo
    Modérateur
    Maître WordPress
    15229 contributions

    Oui, pardon, c’est bien taxonomy avec Y –> taxonomy-type.php

    Voilà le code inséré dans un MU-plugin :

     ‘Visites’,
          ‘singular_name’ => ‘Visite’,
          ‘all_items’ => ‘Toutes les visites’,
          ‘add_new’ => ‘Ajouter une visite’,
          ‘add_new_item’ => ‘Ajouter une nouvelle visite’,
          ‘edit_item’ => ‘Editer une visite’,
          ‘new_item’ => ‘Nouvelle visite’,
          ‘view_item’ => ‘Voir la visite’,
          ‘search_items’ => ‘Rechercher une visite’,
          ‘not_found’ =>  ‘Aucune visite’,
          ‘not_found_in_trash’ => ‘Aucune visite dans la corbeille’,
          ‘menu_name’ => ‘Visites’
        );
     
        /* Creation du CPT Visites */
        register_post_type(
            ‘visites’,       /* slug */
            array(
              ‘label’ => __(‘Visites’),
              ‘labels’ => $labels_visit,
              ‘public’ => true,
              ‘capability_type’ => ‘post’,       /* indique si on se calque sur le modèle « Article » (post) ou « Page » (page) */
    		  ‘menu_position’ => 15,
    		  ‘menu_icon’ => ‘dashicons-location-alt’,
    		  ‘can_export’ => true,
    		  ‘taxonomies’ => array( ‘type’, ‘post_tag’ ),
              ‘has_archive’ => true,
              ‘hierarchical’ => false,           /* Affiche la liste déroulante « Parent » pour les types calqués sur le modèle « Page ») */
              ‘supports’ => array(‘title’, ‘editor’, ‘thumbnail’, ‘excerpt’, ‘custom-fields’, ‘comments’, ‘revisions’)
            ));
    
    // Creation des Custom Taxonomies « Types de Visite »
    register_taxonomy(
      ‘type’,
      ‘visites’,
      array(
        ‘label’ => ‘Types de Visites’,
        ‘labels’ => array(
        ‘name’ => ‘Types de Visites’,
        ‘singular_name’ => ‘Type de Visite’,
        ‘all_items’ => ‘Tous les types’,
        ‘edit_item’ => ‘Éditer le type’,
        ‘view_item’ => ‘Voir le type’,
        ‘update_item’ => ‘Mettre à jour le type’,
        ‘add_new_item’ => ‘Ajouter un type de visite’,
        ‘new_item_name’ => ‘Nouveau type’,
        ‘search_items’ => ‘Rechercher parmi les types’,
        ‘popular_items’ => ‘Types les plus utilisés’
      ),
      ‘rewrite’ => array(‘slug’ => ‘type-de-visites’),
      ‘hierarchical’ => true
      )
    );
    register_taxonomy_for_object_type( ‘type’, ‘visites’ );
    }

    J’ai créé une 1ère « Visite » et j’arrive à l’afficher. Je lui ai affecté le type de visite « chateaux ». J’obtiens aussi l’affichage du type (de visites) « châteaux » avec cette URL : localhost/wptestbourg/type-de-visites/visites-de-chateaux/

    Je viens de créer vite fait une autre visite, avec cette fois le type « visites d’églises » –> j’obtiens bien l’URL localhost/wptestbourg/type-de-visites/visites-des-eglises/

    Pourquoi l’URL localhost/wptestbourg/type-de-visites/ ne donne rien ? Je voudrais pouvoir y classer les visites par Type, comme le propose l’article de WP Channel.

    #1042999
    didier07
    Participant
    Maître WordPress
    1965 contributions

    Essaye

    ‘rewrite’   => array( ‘slug’ => ‘type-de-visites’, ‘with_front’ => true )

    Je te mets une série de liens en vrac qui pare de ce genre d’url rewriting. Je ne suis pas sur que tous te servent, mais je n’ai pas trop le temps de les trier 😳
    Evite de commencer ce soir, ça fait mal à la tête 😆
    http://wordpress.stackexchange.com/questions/101316/custom-post-type-with-two-hierarchical-custom-taxonomies-strategy-to-generate-b
    http://wordpress.stackexchange.com/questions/5308/custom-post-types-taxonomies-and-permalinks?answertab=active#tab-top
    http://wordpress.stackexchange.com/questions/39500/how-to-create-a-permalink-structure-with-custom-taxonomies-and-custom-post-types

    Je t’en garde sous le coude qui piquent un peu plus 😐

    #1043000
    Flobogo
    Modérateur
    Maître WordPress
    15229 contributions

    Merci Didier07, je regarderai ça demain au calme.
    Mais si si tu avais des liens « in french », je préfèrerai, car mes compétences en WordPress sont évolutives mais limitées par l’anglais (trop) technique 😕

    #1043001
    didier07
    Participant
    Maître WordPress
    1965 contributions

    Si j’avais des liens en français je te les aurai mis, malheureusement je n’ai rien en magasin 🙂

    #1043002
    Flobogo
    Modérateur
    Maître WordPress
    15229 contributions

    Alors, j’ai à peu près tout lu, et même si je n’ai pas tout compris, ça ne répond pas à ma demande.
    J’ai dû mal m’expliquer … Mon problème, ce n’est pas les URL, c’est de pouvoir trier et afficher sur une même page mes CPT, en les classant par Custom Catégory

    En fait, il y a un template et une URL qui répondent partiellement à ma demande : le template archive-visites (où visites est le slug du CPT) et qui s’affiche avec l’URL mon-site/visites c’est parfait.
    J’arrive à y afficher la liste des CPT classés par ordre alphabétique, mais je voudrais les grouper par Custom taxonomy : les châteaux / les églises / les villes …

    Voilà mon fichier archive-visites.php (qui appelle content-visites.php, à voir en-dessous) :

    
    
    	<div id="wrap" class="clearfix">	
    		<section id="content" class="primary" role="main">
    		
    		<h1 id="category-title" class="archive-title">
    		Les Visites
    		</h1>
    		
    <p>Prévoir ici une présentation des visites</p>
    
    
    		<div class="clearfix les-visites">
    		
    			<div>
    		 
    		<div class="page-cat clearfix"><a href=" »></a></div>
    		 
    			</div>
    
    		</div>
    
    		</section>
    		
    	
    
    	</div>

    Ce qui me donne comme résultat la liste suivante :
    – Château de Cormatin
    – Chapaize (qui est une église)
    – Berzé-le-Chatel

    Alors que je voudrais comme résultats :
    * Les châteaux (1er terme de la Custom Taxo)
    – Berzé-le-chatel
    – Château de Cormatin
    (et autres châteaux)

    * Les églises (2ème terme de la Custom Taxo)
    – Chapaize
    – (et autres églises par la suite)

    #1043003
    didier07
    Participant
    Maître WordPress
    1965 contributions

    Je te dirais qu’il fat le faire en 2 temps avec la structure suivante

    1- Recherche des valeurs de ta taxonomie (get_terms devrait te faire le travail)
    $terms = get_terms( …. )

    2- Boucle sur les valeurs recupérées
    foreach( $terms as $term )
    $posts = new WP_Query( array(‘post_type’=>…, tax_query => array( array( ‘term’ => ‘ma valeur’ )))
    (ou query_posts éventuellement)
    Ta loop sur les posts récupérés
    /foreach

    #1043004
    Flobogo
    Modérateur
    Maître WordPress
    15229 contributions

    Merci 🙂 Cette fois, je sens que c’est ça.
    Par contre, j’ai besoin d’un peu plus d’aide, je ne suis pas codeuse 😇

    La fonction get_terms ne présente pas d’exemples dans le Codex. :(

    Je n’arrive même pas à afficher la liste des différents termes de taxonomy, rien qu’avec ça :

    <?php
    $terms = get_terms(‘type’, array( ‘hide_empty’ => 0 ))
    echo ‘

      ‘;
      foreach ( $terms as $term ) {
      echo ‘

    • ‘ . $term->name . ‘
    • ‘;
      }
      echo ‘

    ‘;
    ?>

    #1043005
    didier07
    Participant
    Maître WordPress
    1965 contributions

    Ta taxonomy c’est « type-de-visite », pas seulement « type », mais c’est bien ça. Tu traites bien le tableau d’objets que te retourne get_terms

    #1043006
    Flobogo
    Modérateur
    Maître WordPress
    15229 contributions

    Je progresse (grâce à cet article) : j’ai réussi à afficher ma liste de « termes » :

    <?php
    $results = get_terms(‘type’);
    if ($results) {
    foreach ($results as $result) {
    echo ‘

    ‘ . $result->name. ‘

    ‘;
    }
    }
    ?>

    Et j’obtiens bien :

    Visites d’Eglises
    Visites de Châteaux

    Donc, c’est bon pour le point 1

    Maintenant, comment insérer ma boucle ?

    #1043007
    Flobogo
    Modérateur
    Maître WordPress
    15229 contributions

    Voilà ce que j’ai essayé :

    <div class="clearfix les-visites">
    			<div>
    			
    			<?php
    			$results = get_terms('type');
    				if ($results) {
    				foreach ($results as $result) {
    				echo '<h2>‘ . $result->name . ‘</h2>‘;	
    					query_posts( array (
    					‘post_type’ => ‘visites’,
    					‘taxonomy’ => $result,
    					‘posts_per_page’ => -1
    					) );
    					while (have_posts()) : the_post(); ?> 
    		<div class="page-cat clearfix"><a href=" »></a></div>
    		
    			</div>
    		</div>

    … sauf que ça m’affiche toute la liste de mes CPT pour chaque Taxonmy, au lieu de ne mettre que les CPT rattachés à cette taxo précise.

    Comment n’avoir que les CPT rattachés à chaque catégorie, l’une après l’autre ?

    #1043008
    didier07
    Participant
    Maître WordPress
    1965 contributions

    Je te laisse adapté le code ci-dessous 😉

    $query_args= array(
    				 ‘post_type’		=> ‘mon-post-type’
    				,’tax_query’		=> array(
    											array(
    												 ‘taxonomy’ => ‘slug-taxonomy’
    												,’field’	=> ‘id’
    												,’terms’	=> ‘ma-valeur’,
    										)
    			, ‘posts_per_page’	=> -1
    			, ‘orderby’			=> ‘ASC’
    		));

    #1043009
    Flobogo
    Modérateur
    Maître WordPress
    15229 contributions

    Çà ne fonctionne pas, je récupère juste le titre de ma page dans chaque taxonomy :

    Visites d’Églises
    Essai affichage CPT par catégories
    Visites de Châteaux
    Essai affichage CPT par catégories

    Je ne savais pas ce qu’il fallait mettre pour ‘terms’ => ‘ma-valeur’, puisque j’ai plusieurs termes dans ma taxonomy.
    J’ai essayé avec le slug d’un des termes, j’ai essayé avec $result (ma valeur ?), et j’ai essayé en supprimant cette ligne, mais j’ai toujours le même résultat.

    Pour mémoire, voici le code complet :

    <div class="clearfix les-visites">
    			<div>
    			
    			<?php
    			$results = get_terms('type');
    				if ($results) {
    				foreach ($results as $result) {
    				echo '<h2>‘ . $result->name . ‘</h2>‘;	
    			$query_args= array(
                    ‘post_type’        => ‘visites’,
                    ‘tax_query’        => array(
                                                array(
                                                     ‘taxonomy’ => ‘type’,
                                                    ‘field’    => ‘id’,
                                                    ‘terms’    => $result,
    												)
                , ‘posts_per_page’    => -1
                , ‘orderby’            => ‘ASC’
    			));
    			
    				while (have_posts()) : the_post(); ?> 
    		<div class="page-cat clearfix"><a href=" »></a></div>
    		
    			</div>
    		</div>

    #1043010
    didier07
    Participant
    Maître WordPress
    1965 contributions

    A premiere vue, mais je ne suis pas très réveillé 🙂
    ‘field’ => ‘id’,
    Tu recherches les posts part ID du terme
    ‘terms’ => $result->term_id,

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