2009-06-18 10 views
7

Sto cercando di creare un sito WordPress con sei elenchi su una pagina, ciascun elenco che mostra post di una categoria diversa. Semplice.WordPress - produzione di un elenco di post filtrati per tag e quindi categoria

Ma poi, se un utente seleziona un tag, portandoli a quella pagina di archivio tag, voglio che vedano ancora il modello a sei liste, ma tutti i messaggi all'interno di ogni categoria vengono anche filtrati dal tag. Quindi gli elenchi dei post vengono filtrati prima per tag e poi per categoria.

Per quanto ne so, non c'è modo di farlo usando query_posts o altro, ha bisogno di un uso più avanzato del database, ma non ho idea di come farlo! Penso che ci sia una domanda simile qui, ma poiché conosco pochissimo PHP e nessun MySQL, non riesco a dare un senso alle risposte!

risposta

5

Destra, ho finalmente trovato un relativamente semplice soluzione a questo.

C'è un bug in WordPress che impedisce il funzionamento di entrambe le categorie e tag, quindi query_posts('cat=2&tag=bread'); non funzionerebbe, ma un modo per aggirarlo è query_posts('cat=2&tag=bread+tag=bread'); che funziona magicamente.

In un modello tag.php, ho voluto per prendere il tag da quell'archivio, così ho dovuto fare questo:

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

che funziona perfettamente.

0

Secondo the Wordpress API, è possibile filtrare per tag all'interno di una chiamata a query_posts.

Esempi:

query_posts('tag=cooking'); 

query_posts('tag=bread,baking'); 

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

Purtroppo questa query sovrascriverà una categoria e non è possibile utilizzarla per filtrare per categoria all'interno di un tag, mostrerà solo tutti i post con quella categoria e tutti i post all'interno di tale tag. –

+0

Si potrebbe inizialmente chiamare get_query per ottenere una serie di post filtrati per tag. Quindi esegui iterazioni su di esso e alloca manualmente i post in un array per ciascuna delle sei categorie. –

+0

Sembra la cosa perfetta, ma io non sono PHPer, quindi non ho idea di come farlo! –

2

provare questo codice:

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

Nessun errore o altro, appena prodotto nulla: S –

+0

Hai sostituito 'selected_tag' e 'selected_category' con i tuoi valori, no? 8) Potrebbe essere utile inserire questo codice nel modello di wordpress e ne fare 6 per ogni pagina. – Wiseman

+0

Avevo fatto entrambe le cose :) –

Problemi correlati