Récupération des informations avec custom post et custom taxonomy (Créer un compte)

  • Statut : non résolu
6 sujets de 1 à 6 (sur un total de 6)
  • Auteur
    Messages
  • #524267
    olivierbeyo
    Membre
    Initié WordPress
    30 contributions

    Bonjour,

    Ma configuration WP actuelle
    – Version de WordPress : 3.5.1
    – Version de PHP/MySQL : 5.2.11/5.5.8
    – Thème utilisé : Perso
    – Extensions en place :
    – Nom de l’hebergeur : localhost
    – Adresse du site :

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

    je dois créer un site dont une partie liste des établissements, regroupés par type.
    j’ai donc créé :

    function custom_post_etablissements() {
    $labels = array(
    ‘name’ => __(‘Etablissements’),
    ‘add_new’ => ‘Ajouter un nouvel établissement’,
    ‘add_new_item’ => ‘Ajouter une nouvel établissement’,
    ‘edit_item’ => ‘Mettre à jour un établissement’,
    ‘menu_name’ => __(‘Etablissements’)
    );
    $args = array(
    ‘labels’ => $labels,
    ‘public’ => true,
    ‘show_in_nav_menus’ => true,
    ‘menu_position’ => 5,
    ‘show_ui’ => true,
    ‘show_in_menu’ => true,
    ‘capability_type’ => ‘post’,
    ‘hierarchical’ => true,
    ‘with_front’ => true,
    ‘supports’ => array( ‘title’, ‘editor’, ‘thumbnail’, ‘excerpt’),
    ‘has_archive’ => false,
    );
    register_post_type( ‘etablissements’, $args );
    }
    add_action( ‘init’, ‘custom_post_etablissements’ );

    function taxonomies_etablissements() {
    $args = array(
    ‘hierarchical’ => false,
    ‘label’ => ‘Type d’établissement’,
    ‘query_var’ => true,
    ‘rewrite’ => true,
    ‘show_admin_column’ => true ,
    );
    register_taxonomy( ‘type_etablissement’, ‘etablissements’, $args);
    }
    add_action( ‘init’, ‘taxonomies_etablissements’, 0 );

    J’ai créé un certain nombre de type d’établissement (type 1, type2…)
    J’ai créé un certain nombre d’établissement auxqules j’ai attribué un type d’établissement
    etablissement 1 => type 1
    etablissement 2 => type 1
    etablissement 3 => type 2
    etablissement 4 => type 3
    etablissement 5 => type 1

    Je voudrais savoir quelle est la « meilleure » (?) méthode pour avoir :
    dans le menu la liste des types d’établissement
    puis quand on clique sur le type, on affiche la liste des établissements de ce type (1)
    puis quand on clique sur le lien d’un des établissements, on affiche le contenu de l’établissement (2) + la liste des établissement du même type dans la colonne sidebar (3)

    pour l’instant j’étais parti sur l’idée pour (1) de créer une Page par type d’établissement qui aurait un template spécifique affichant le liste des établissements

    <?php
    /**
    * Template Name: Etablissements
    */
    get_header(); ?>
    <div id="primary" class="site-content">
    <div id="content" role="main">
    <?php
    wp_reset_postdata();
    $args = array (
    'post_type' => ‘etablissements’,
    ‘orderby’ => ‘meta_value’,
    ‘type_etablissement’ => ‘type1’,
    ‘order’ => ‘DESC’,
    ‘posts_per_page’=>’-1’//’posts_per_page’=>’-1’//-1 = tous
    );
    $query = new WP_Query($args);
    $i=0;
    echo ‘<ul>‘;
    while ( $query->have_posts() ) : $query->the_post();
    ?>
    <li><a href="<?php the_permalink(); ?> » title= »<?php printf( esc_attr__( 'Lire %s', 'twentyeleven' ), the_title_attribute( 'echo=0' ) ); ?> » rel= »bookmark »>
    <div class="thumb"><?php the_post_thumbnail('medium'); ?></div>
    <h2 class="titleoverlay"><?php the_title(); ?></h2></a></li>
    <?php
    $i++;
    endwhile;
    echo '</ul>‘;
    ?>
    </div><!-- #content -->
    </div><!-- #primary -->
    <?php get_footer(); ?>

    Mais déjà celà dans ce cas, cela veut dire que je dois créer autant de template qu’il y a de type d’établissement
    à cause du paramètre ‘type_etablissement’ => ‘xxxx’
    peut-on déjà améliorer ça ? Et est-ce que cette manière de faire (créer une page « conteneur) est optimale ?

    Ensuite, quand j’ai cliqué sur un des lien pour un type donné,
    j’affiche la fiche l’établissement, mais je ne vois pas comment récupérer à partir de cette page (single.php), la liste des établissements de ce type ? point (3)
    ex : pour l’établissement 1, comment avoir

    <h2>type 1</h2>
    <ul>
    <li><a ...>etablissement 1</a></li>
    <li><a ...>etablissement 2</a></li>
    <li><a ...>etablissement 5</a></li>
    <ul>

    j’ai regardé du coté de get_taxonomies, get taxonomy, … mais ce n’est pas ce que je cherche.

    Merci d’avance de me donner vos suggestions

    #893401
    njaka41
    Participant
    Chevalier WordPress
    212 contributions

    Bonjour olivierbeyo,
    Ce que j’aurais fais c’est de créer un modèle de page (Une seul), puis de créer un « custom field : type_etablissement » pour cette page. Tu passe les paramètres via ce custom field (pour évité de créer des modèle de page à chaque type).
    ton array peut donc ressembler à ça:

    $args = array (
    ‘post_type’ => ‘etablissements’,
    ‘orderby’ => ‘meta_value’,
    ‘type_etablissement’ => get_post_meta($post->ID, ‘presidence’, true) ,
    ‘order’ => ‘DESC’,
    ‘posts_per_page’=>’-1’//’posts_per_page’=>’-1’//-1 = tous
    );

    C’est juste une piste comme d’autre, à toi de voir…
    Bon courage 🙂

    #893402
    njaka41
    Participant
    Chevalier WordPress
    212 contributions

    Je réctifie mon truc désolé:
    Tu créer un taxonomie article par exemple, ou category…

    $args = array (
    ‘post_type’ => ‘etablissements’,
    ‘article’ => get_post_meta($post->ID, ‘type_etablissement’, true) ,
    ‘posts_per_page’=>’-1’//’posts_per_page’=>’-1’//-1 = tous
    );

    article étant un taxonomie et type_etablissement le custom field….

    #893403
    olivierbeyo
    Membre
    Initié WordPress
    30 contributions

    Hmm, la piste du custom field me semble intéressante (je n’y avais pas pensé pour gérer ça), par contre je ne vois pas trop comment l’exploiter :
    en utilisant mon premier code pour les custom type, je remplace la custom taxonomie par un custom field ?

    function custom_post_etablissements() {
    $labels = array(
    ‘name’ => __(‘Etablissements’),
    ‘add_new’ => ‘Ajouter un nouvel établissement’,
    ‘add_new_item’ => ‘Ajouter une nouvel établissement’,
    ‘edit_item’ => ‘Mettre à jour un établissement’,
    ‘menu_name’ => __(‘Etablissements’)
    );
    $args = array(
    ‘labels’ => $labels,
    ‘public’ => true,
    ‘show_in_nav_menus’ => true,
    ‘menu_position’ => 5,
    ‘show_ui’ => true,
    ‘show_in_menu’ => true,
    ‘capability_type’ => ‘post’,
    ‘hierarchical’ => true,
    ‘with_front’ => true,
    ‘supports’ => array( ‘title’, ‘editor’, ‘thumbnail’, ‘excerpt’, ‘custom-field’), //Ajout des custom fields
    ‘has_archive’ => false,
    );
    register_post_type( ‘etablissements’, $args );
    }
    add_action( ‘init’, ‘custom_post_etablissements’ );

    mais dans ce cas,
    – à quoi correspond ta taxonomy « article » ?
    – en quoi ton code évite d’avoir plusieurs modèles ? : si je crée une page « type 1 », une page « type 2 », que je leur … et que je les ajoute au menu que je leur attribue le modèle « Etablissement », si je clique sur un de ces type, j’ai l’ensemble des etablissements, pas de tri…
    le but étant d’avoir dans le menu : les types et quand on clique sur un type on a les établissment de ce type.
    peux tu m’expliquer comment tu structurerais ça :
    – un custom-post Etablissement (?) ayant un custom field type_etablissement), et une taxo (sui serait quoi et qui servirait à quoi alors) ?
    – qu’ajoute tu dans le menu pour avoir la liste des types d’établissement dans le déroulant ?

    Merci d’avance

    #893404
    njaka41
    Participant
    Chevalier WordPress
    212 contributions
    olivierbeyo wrote:
    – à quoi correspond ta taxonomy « article » ?

    La taxonomie article corresponde au type d’établissement.
    Le système permet de créer qu’une seul modèle de page, mais par contre de créer toutes les pages pour passer la variable type.
    Puis tu ajoute les pages dans le menu normal.

    – Une autre piste c’est de faire passer la variable par la méthode GET (php). Puis de faire la même requête. C’est dans le lien que tu fais passer ta variable.
    Ex: http://monsite.com/ma_page.php?type=type1

    $args = array (
    ‘post_type’ => ‘etablissements’,
    ‘orderby’ => ‘meta_value’,
    ‘type_etablissement’ => $_GET[« type »] ,
    ‘order’ => ‘DESC’,
    ‘posts_per_page’=>’-1’//’posts_per_page’=>’-1’//-1 = tous
    );

    a toi de voir ce qui te convient

    a+ 🙂

    #893405
    olivierbeyo
    Membre
    Initié WordPress
    30 contributions

    Bon, pour être sûr que l’on parle de la même chose :
    Ton idée d’utiliser un custom field me plaît bien.
    1)Cependant, est-ce que tu ajoute ce custom field à une page standard (type « page ») ou bien tu l’ajouterait à un custom post type (etablissements) comme j’ai fait (mon premier message) ?

    2)
    tu dis

    La taxonomie article corresponde au type d’établissement.

    J’avoue que je ne comprend plus trop (peut-être suis-je trop fatigué), mais concrètement, est-ce que tu suggère que je crée une taxonomie ET un custom field pour le type d’article Etablissement (dans ce cas, à quoi sert le custom field, si la taxo sert pour le type d’établissement) ?

    3) Pour ton idée de passer une variable supplémentaire dans le permalien (ici la variable type d’établissement), j’ai déjà eu des problèmes que je n’ai jamais réussi à résoudre :
    – avec les urls rewrités, la variable semble « perdue » et pire, les autres variables changent (vu avec avec un var_dump…), bien que j’ajoute dans functions.php

    function add_query_vars($query_vars)
    {
    $query_vars[] = « mavariablesupplementaire »;
    return $query_vars;
    }
    add_filter(‘query_vars’, ‘add_query_vars’);

    En tout cas merci pour le temps que tu passes à me donner des pistes.

6 sujets de 1 à 6 (sur un total de 6)
  • Le forum ‘Utilisation spécifique de WordPress’ est fermé à de nouveaux sujets et réponses.