Classer les Custom taxonomy dans une table des matières (Créer un compte)

  • Statut : non résolu
9 sujets de 16 à 24 (sur un total de 24)
  • Auteur
    Messages
  • #824176
    Interned
    Membre
    Chevalier WordPress
    229 contributions

    Je nage entre query_posts, get_posts, WP_query, is_tax… Je ne vois pas trop comment faire, tant pis si je ne peux pas faire ce « sommaire »…

    Par contre, j’aurais bien aimé qu’à partir de mon fichier taxonomy.php qui liste les articles par taxo faire en sorte qu’au clic sur le titre on puisse afficher immédiatement le fichier attaché et non l’Article WP puisqu’il faut à nouveau cliquer sur le titre pour ouvrir le PDF :-/

    Edit : affichage immédiat des PDFs résolu

    #824177
    Guy
    Participant
    Maître WordPress
    14817 contributions

    Pour le tri sur les taxonomies dans les requêtes, j’avais affiché une fonction permettant de le faire, recherche quelque chose avec « tri résultat de recherche » dans les messages récents du forum, je n’ai pas le temps tout de suite, mais je pourrai regarder demain.

    #824178
    Interned
    Membre
    Chevalier WordPress
    229 contributions

    Re, re…

    J’ai une question très naïve sur cette fonction que tu avais proposée à quelqu’un : si je l’insère puis la supprime de mon fichier functions.php, ça va pas trop faire de couacs au niveau de la bdd ?

    function orderby_cat_tax( $clauses, $wp_query ) {
    global $wpdb;
    $taxonomies = get_taxonomies();
    foreach ($taxonomies as $taxonomy) {
    if ( isset( $wp_query->query[‘orderby’] ) && $taxonomy == $wp_query->query[‘orderby’] ) {
    $clauses[‘join’] .=<<term_relationships} ON {$wpdb->posts}.ID={$wpdb->term_relationships}.object_id
    LEFT OUTER JOIN {$wpdb->term_taxonomy} USING (term_taxonomy_id)
    LEFT OUTER JOIN {$wpdb->terms} USING (term_id)
    SQL;
    $clauses[‘where’] .=  » AND (taxonomy = ‘{$taxonomy}’ OR taxonomy IS NULL) »;
    $clauses[‘groupby’] = « object_id »;
    $clauses[‘orderby’] = « GROUP_CONCAT({$wpdb->terms}.name ORDER BY name ASC) « ;
    $clauses[‘orderby’] .= ( ‘ASC’ == strtoupper( $wp_query->get(‘order’) ) ) ? ‘ASC’ : ‘DESC’;
    }
    }
    return $clauses;
    }
    add_filter(‘posts_clauses’, ‘orderby_cat_tax’, 10, 2 );

    En tous cas, c’est un sacré code parce que perso, j’ai jamais vu « <<<SQL", donc je suis loin de décortiquer tout le code mais visiblement ça crée une jointure appelée "clauses" qui se connecte sur différents critères… tain, vraiment pas évident le code 😉

    #824179
    Guy
    Participant
    Maître WordPress
    14817 contributions

    La fonction ne fait aucune insertion, elle fait uniquement un tri à l’affichage et ne modifie en rien les données dans les bases. Tu n’as rien à craindre à l’enlever, la remettre et l’enlever à nouveau etc….

    l’écriture

    <<<MACHIN
    mes machin et trucs
    MACHIN;

    est une autre manière d’écrire des chaines, c’est la syntaxe heredoc, c’est du PHP et cela permet de ne plus se soucier des echappement (apostrophes, guillemets etc…)

    #824180
    Interned
    Membre
    Chevalier WordPress
    229 contributions

    Okidoki, je prends note.

    Donc, si je suis ton processus, on en est à :

    Ensuite, dans ta boucle, tu regardes quel terme de la taxonomie rubrique est renseigné pour l’article, si il est différent du précédent, tu affiche le terme, etc…

    Est-ce que je ne me trompe pas trop ?

    #824181
    Guy
    Participant
    Maître WordPress
    14817 contributions

    oui théoriquement, c’est cela.

    Avant d’afficher ton sommaire, tu appelles le add_filter, tu appelleras remove_filter en fin de traitement, il est inutile de le laisser pour le reste du site.

    donc:
    – add_filter(…..)
    -ta query en mettant orderby=rubrique (ou la taxonomie sur laquelle tu veux faire le tri) dans les arguments

    boucler sur les résultats, à l’intérieur de la boucle si la taxonomie de l’article change tu l’affiches

    – remove_filter(….

    #824182
    Interned
    Membre
    Chevalier WordPress
    229 contributions

    Re.

    Bon, avec ce code, je parviens à récupérer les termes de la custom taxo « rubriques » pour en faire un sommaire. Par contre, tous les articles de tous les numéros s’affichent dans la table des matières alors qu’il ne s’agirait d’afficher que les articles d’un numéro donné. Et, de plus, tout s’affiche quel que soit la CT demandée (auteur, thématique, etc.) mais ça me semble normal puisqu’il n’y a aucun filtre.

    <li id="summary" class="sum-container">
    <h3 class="sum-title">Sommaire</h3>

    <ul>

    <li>
    <a href="slug, ‘rubriques’ ); ?> »>
    name; ?>
    </a>
    <ul>
    ‘publications’, ‘taxonomy’ => ‘rubriques’, ‘term’ => $sum->slug );
    $sum_posts = new WP_Query ($wpq);
    ?>
    posts as $post ) : ?>
    <li>
    <a href="ID ); ?> »>
    post_title; ?>
    </a>
    </li>

    </ul>
    </li>

    </ul>
    </li>

    J’ai tenté de faire comme tu l’as indiqué mais sans succès. Mais bon, c’est déjà une étape : j’ai le nom de mes rubriques affichées avec dessous tous les articles correspondants. Reste maintenant à filtrer pour que ce ne soit que les articles de tel ou tel numéro en particulier qui soient affichés

    #824183
    Interned
    Membre
    Chevalier WordPress
    229 contributions

    J’ai lu que, pour les filtres, il fallait mettre le fichier contenant la fonction du filtre dans wp-content/plugins. Cela tourne à la création d’une extension, là, non ? 😉

    J’avais mis la fonction orderby_cat_tax dans le fichier functions.php, pour ensuite appeler le filtre dans mon template (comme tu l’as indiqué, Guy. Enfin, ça allait de soi pour moi que c’était dans le Modèle de page ensuite, donc in taxonomy.php). Mais ça ne marche pas du tout, hihi :lol:.

    Par contre, je vois que ça se joue à ce niveau-là :
    <?php
    $wpq = array( ‘post_type’ => ‘publications’, ‘taxonomy’ => ‘rubriques’, ‘term’ => $sum->slug );
    $sum_posts = new WP_Query ($wpq);
    ?>
    C’est ça qui m’affiche tous les liens de toutes numéros 😕. Je cherche encore (j’l’aurai :fouet:)

    #824184
    Guy
    Participant
    Maître WordPress
    14817 contributions
    Interned wrote:
    J’avais mis la fonction orderby_cat_tax dans le fichier functions.php, pour ensuite appeler le filtre dans mon template (comme tu l’as indiqué, Guy. Enfin, ça allait de soi pour moi que c’était dans le Modèle de page ensuite, donc in taxonomy.php). Mais ça ne marche pas du tout, hihi :lol:.

    Je ne sais pas où tu as lu que les filtres devaient être placés dans le répertoire plugin, mais il doit y avoir confusion quelque part. Il faut effectivement le mettre dans ton fichier functions.php, et encadrer l’appel par les add et remove filters.

    Sinon, reconsultes le codex pour regarder comment on se sert de wp_query, tu dois faire une boucle

    while ( $sum_posts->have_posts() )
    {
    $sum_posts->the_post();
    }
    wp_reset_postdata();

    Mais en aucun cas tu ne peux faire un foreach( $sum_posts->posts as $post ) qui est la forme lorsque l’on se sert de la fonction get_posts.

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