- Statut : non résolu
- Ce sujet contient 12 réponses, 3 participants et a été mis à jour pour la dernière fois par dlo, le il y a 17 années et 6 mois.
-
AuteurMessages
-
21 mai 2007 à 8 h 24 min #452151
Bonjour,
Voila comment s’organise mes articles
1er article qui appartient à la catégorie 1
2ème articles qui appartient à la catégorie 2
3ème article qui appartient aux catégorie 1 et catégorie 2Pour lister les 2 premiers articles cela est simple, Mais je ne sais pas comment lister le 3ème.
Il faudrait utiliser un opérateur logique mais je ne sais pas si cela est possible avec la fonction query_posts(« category_name= ??? »);
4 juin 2007 à 7 h 49 min #600604Personne a une idée sur la manipulation a faire pour afficher seulement des articles apartenant a la catégorie 1 et la catégorie 2?
4 juin 2007 à 8 h 59 min #600605A mon avis ca n’est pas possible, tu devras être obliger de faire une requête SQL personnalisée…
4 juin 2007 à 11 h 45 min #600606Ok et quelle genre de requète? si tu sais pas c’est pas grave je chercherai tout seul.
4 juin 2007 à 13 h 30 min #600607Pour afficher les articles appartenant aux deux catégories en même temps, il faut rajouter le code suivant dans la boucle de lecture.
<a href=" »></a> <br />Cordialement
4 juin 2007 à 19 h 48 min #600608Si je peux me permettre l’inconvénient de ta technique dlo
Imaginons que tu as configuré WP pour afficher 10 articles, si il n’y a que le 9ème qui appartient aux 2 catégories, ta page affichera 1 seul article.
Alors que le 11ème article peut très bien appartenir aux 2 catégories, et il devrait être afficher 🙂
Tu vois le problème 🙂
5 juin 2007 à 9 h 05 min #600609En effet AmO a raison mais dans mon cas cela n’est pas trop génant puisque je fais une requète à part :
Donc pour le moment j’affiche tous les articles de la catégorie 54, par la suite je voudrais afficher que ceux qui appartiennent à la catégorie 54 mais aussi 55. Je rajoute une ligne pour donner ça :
<?php if ( in_category(55)) :
5 juin 2007 à 15 h 32 min #600610AmO wrote:Si je peux me permettre l’inconvénient de ta technique dloBien sûr que tu peux te permettre, AmO ! 🙂 Surtout que ta remarque est tout à fait pertinente et que je n’avais pas vu cet aspect des choses. Mauvais que je suis ! :fouet:
Bon, piqué au vif, j’ai cherché LA solution ultime… et je propose ceci :
Ajouter deux paramètres à ceux disponibles dans un query_posts() pour permettre la sélection d’articles appartenant à deux catégories (ou plus) et, cerise sur le gateau, on peut l’utiliser aussi pour avoir les articles appartenant à une seule catégorie dans une liste donnée.
De plus, la requête ne va pas chercher les articles appartenant à une catégorie fille des catégories choisies comme dans la requête d’origine.Paramètres :
xcat: liste des catégories séparée par une virgule
xop: Opérateur logique à appliquer à la liste xcat
Valeurs possibles:
AND : l’article doit appartenir à toutes les catégories listées.
OR : l’article doit appartenir à une des catégories listées.
XOR : l’article doit appartenir à une et une seule des catégories listée.Cela s’utilise donc comme ceci :
// JE NE VEUX QUE LES ARTICLES APPARTENANT A LA FOIS A LA CATEGORIE 1 ET 5
<p></p>Et tout cela en créant un fichier functions.php pour son thème avec les instructions suivantes:
0 )
$newwhere = » AND $wpdb->post2cat.category_id IN ($in_cats) »;
}
}
return $where.$newwhere;
}
function extendedCatJoin($join) {
global $wpdb;
$catop = strtoupper(get_query_var(‘xop’));
$cats = get_query_var(‘xcat’);
$newjoin = »;
if (($catop != ») && ($cats != ») && ($join == »))
$newjoin = » LEFT JOIN $wpdb->post2cat ON ($wpdb->posts.ID = $wpdb->post2cat.post_id) « ;
return $join.$newjoin;
}
function extendedCatGroupBy($groupby) {
global $wpdb;
$catop = strtoupper(get_query_var(‘xop’));
$cats = get_query_var(‘xcat’);
$having = »;
if (($catop != ») && ($cats != »)) {
if ((!empty($cats)) && ($cats != ‘0’)) {
$cats = ».urldecode($cats). »;
$cats = addslashes_gpc($cats);
$cat_array = preg_split(‘/[,s]+/’, $cats);
$cat_number = count($cat_array);
if ($catop == « AND »)
$having = » HAVING postnbr = $cat_number « ;
if ($catop == « OR »)
$having = » HAVING postnbr posts}.ID »;
}
}
return $groupby.$having;
}
function extendedCatFields($fields) {
global $wpdb;
$catop = strtoupper(get_query_var(‘xop’));
$cats = get_query_var(‘xcat’);
$countrows = »;
if (($catop != ») && ($cats != »)) {
$countrows = « , COUNT(*) as postnbr « ;
}
return $fields.$countrows;
}
add_filter(‘posts_where’,’extendedCatSelection’);
add_filter(‘posts_join’, ‘extendedCatJoin’);
add_filter(‘posts_groupby’, ‘extendedCatGroupBy’);
add_filter(‘posts_fields’, ‘extendedCatFields’);
?>On pourrait bien sûr en faire facilement un plugin… mais ceci est une autre histoire.
Qu’en pensez-vous ?
Cordialement
6 juin 2007 à 11 h 44 min #600611Merci dlo pour ton programme tu devrais le proposer aux développeurs de WordPress car sa serait util de pouvoir faire des opérations logiques entre les catégories.
Mais malheureusement dans mon cas cela ne me convient pas :
– Premièrement parceque sa annule la requète principale (car je l’utilise dans une requète annexe).
– Deruxièment parceque la partie que tu mets dans « fonction.php » génére des erreurs sur les accents.6 juin 2007 à 11 h 58 min #600612Merci pour le retour, YoannEMF. 🍺
Concernant les deux points que tu mentionnes:
1) Il est tout à fait valide de mettre plusieurs boucles dans un template. Il est donc possible de garder la boucle principale et de rajouter ensuite un appel à query_posts avec les nouveaux paramètres puis une autre boucle de lecture. C’est déjà ce que tu fais en utilisant get_posts() et une boucle foreach…
2) Peux-tu détailler ce que tu entends par « générer des erreurs sur les accents » ? Je n’ai pas pu reproduire le cas et je ne suis pas sûr d’avoir compris. Un exemple serait parfait. Je t’en remercie d’avance.
Cordialement
7 juin 2007 à 12 h 43 min #600613Pour le problème au niveau des accents, WordPress remplace, sur les pages qu’il affiche, les lettre accentuées par une suite de caractères bizarres.
Dans mon cas j’ai utilisé la première solution que tu proposais.
Ceci dit, je pense sincèrement que le programme que tu as proposé (je répéte) est une très bonne base non pas pour faire un plugin mais pour être intégré directement au coeur de WP. Cela repousserait ses limites en rendant possible la modularité dans la requète des article tel que ton programme est capable de le faire. Alors si tu veux un conseil : ne le perd pas.
Et merci.7 juin 2007 à 14 h 12 min #600614dlo, beau travail…
7 juin 2007 à 14 h 38 min #600615YoannEMF wrote:Ceci dit, je pense sincèrement que le programme que tu as proposé (je répéte) est une très bonne base non pas pour faire un plugin mais pour être intégré directement au coeur de WP.AmO wrote:dlo, beau travail…Que de compliments en aussi peu de temps ! Ma modestie naturelle ne va pas y résister. 😇
En tout cas, merci de votre intérêt. :happy:
Cordialement
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.