- Statut : non résolu
- Ce sujet contient 23 réponses, 3 participants et a été mis à jour pour la dernière fois par
Guy, le il y a 13 années et 3 mois.
-
AuteurMessages
-
30 mars 2012 à 14 h 44 min #824176
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
30 mars 2012 à 19 h 33 min #824177Pour 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.
6 avril 2012 à 10 h 13 min #824178Re, 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 😉
6 avril 2012 à 12 h 58 min #824179La 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…)
6 avril 2012 à 13 h 42 min #824180Okidoki, 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 ?
6 avril 2012 à 14 h 26 min #824181oui 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 argumentsboucler sur les résultats, à l’intérieur de la boucle si la taxonomie de l’article change tu l’affiches
– remove_filter(….
10 avril 2012 à 9 h 37 min #824182Re.
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
10 avril 2012 à 15 h 25 min #824183J’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:)10 avril 2012 à 15 h 41 min #824184Interned 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.
-
AuteurMessages
- Le forum ‘Utilisation spécifique de WordPress’ est fermé à de nouveaux sujets et réponses.