2009-06-18 6 views
7

J'essaye de faire un site WordPress qui a six listes sur une page, chaque liste montrant des messages d'une catégorie différente. Simple. Mais ensuite, si un utilisateur sélectionne une étiquette, en l'emmenant sur cette page d'archive, je veux qu'il voit toujours le modèle de six listes, mais tous les messages de chaque catégorie sont également filtrés par la balise. Les listes de publications sont donc filtrées d'abord par tag, puis par catégorie. Pour autant que je puisse dire, il n'y a aucun moyen de le faire en utilisant query_posts ou quoi que ce soit, il a besoin d'une utilisation plus avancée de la base de données, mais je ne sais pas comment faire cela! Je pense qu'il y a une question similaire ici, mais parce que je connais très peu PHP et pas de MySQL, je n'arrive pas à comprendre les réponses!WordPress - produisant une liste de messages filtrés par tag, puis catégorie

Répondre

5

droit, j'ai enfin trouvé une solution relativement simple à cela.

Il y a un bug dans WordPress empêchant une requête de la catégorie et des balises fonctionnant, donc query_posts('cat=2&tag=bread'); ne fonctionnerait pas, mais un moyen de contourner cela est query_posts('cat=2&tag=bread+tag=bread'); qui fonctionne comme par magie.

Dans un modèle de tag.php, je voulais à ramasser l'étiquette de cette archive, donc je devais le faire:

<?php query_posts('cat=12&tag='.$_GET['tag'].'+'.$_GET['tag']); ?> 

qui fonctionne parfaitement.

0

Selon the Wordpress API, vous pouvez filtrer par des étiquettes dans un appel à query_posts.

Exemples:

query_posts('tag=cooking'); 

query_posts('tag=bread,baking'); 

query_posts('tag=bread+baking+recipe'); 
+0

Malheureusement, cette requête remplacera une catégorie, et vous ne pouvez pas l'utiliser pour filtrer par catégorie dans une étiquette, elle montrera seulement tous les articles avec cette catégorie et tous les articles dans cette étiquette. –

+0

Vous pouvez d'abord appeler get_query pour obtenir un tableau de messages filtrés par tag. Puis passez en revue et répartissez manuellement les messages dans un tableau pour chacune des six catégories. –

+0

Cela semble être la chose parfaite, mais je ne suis pas un PHPer, donc je n'ai aucune idée de comment le faire! –

2

Essayez ce code:

query_posts('tag=selected_tag'); 

while (have_posts()) : the_post(); 


    foreach((get_the_category()) as $category) 
     { 

     if ($category->cat_name == 'selected_category') 
      { 
      // output any needed post info, for example: 
      echo the_title(); 
      } 

     } 


endwhile; 
+0

Aucune erreur ou quoi que ce soit, rien produit: S –

+0

Vous avez remplacé 'selected_tag' et 'selected_category' par vos propres valeurs, n'est-ce pas? 8) Il peut être utile de placer ce code dans un modèle wordpress et de créer 6 d'entre eux pour chaque page. – Wiseman

+0

J'avais fait ces deux choses :) –

Questions connexes