2010-05-31 15 views
6

Ho cercato un po 'di tempo per trovare un modo per limitare i tag di wordpress in base alla data e ordinarli in base al numero di volte in cui sono comparsi nel periodo di tempo selezionato. Ma sono stato piuttosto insoddisfatto.Come limitare il wordpress tagpress per data?

Quello che sto cercando di ottenere è qualcosa come gli argomenti di tendenza su Twitter. Ma in questo caso, "tag di tendenza". Di default il wordpress tagcloud mostra i tag più popolari di tutti i tempi. Il che non ha senso nel mio caso, dal momento che voglio tenere traccia delle tendenze attuali.

L'ideale sarebbe qualcosa di simile:

Tag più popolari di oggi

  • Obama (18 menzioni)
  • New York (15 menzioni)
  • Iron Man (11 menzioni)
  • Robin Hood (7 citazioni)

E poi moltiplicato per "più popolare questa settimana" e "più popolare questo mese". Qualcuno sa di un modo per raggiungere questo obiettivo?

risposta

0

Sono abbastanza sicuro che i tag non abbiano data/ora - forse si potrebbe fare una ricerca di post con tag specifici per un determinato periodo di tempo?

+0

In effetti non dispongono di data e ora. Tuttavia, poiché sono correlati ai post e i post hanno un timestamp, il mio pensiero era che fosse possibile recuperare tali timestamp. La tua risposta mi ha fatto pensare però. Non sarebbe più semplice aggiungere una tabella di timestamp ai tag? – Nordin

3

Ok, quindi quello che penso che probabilmente vorrai è farlo per dire, gli ultimi 50 post.

Loop negli ultimi n messaggi, estrarre il term_id di ogni tag per ogni post, quindi passare quella stringa nella include argomento wp_tag_cloud();

$how_many_posts = 50; 
$args = array(
    'posts_per_page' => $how_many_posts, 
    'orderby' => 'date', 
    'order' => 'DESC', 
); 
// get the last $how_many_posts, which we will loop over 
// and gather the tags of 
query_posts($args); 
// 
$temp_ids = array(); 
while (have_posts()) : the_post(); 
    // get tags for each post 
    $posttags = get_the_tags(); 
    if ($posttags) { 
     foreach($posttags as $tag) { 
      // store each tag id value 
      $temp_ids[] = $tag->term_id; 
     } 
    } 
endwhile; 
// we're done with that loop, so we need to reset the query now 
wp_reset_query(); 
$id_string = implode(',', array_unique($temp_ids)); 
// These are the params I use, you'll want to adjust the args 
// to suit the look you want  
$args = array(
    'smallest' => 10, 
    'largest' => 30, 
    'unit'  => 'px', 
    'number' => 150, 
    'format' => 'flat', 
    'separator' => "\n", 
    'orderby' => 'count', 
    'order'  => 'DESC', 
    'include' => $id_string, // only include stored ids 
    'link'  => 'view', 
    'echo'  => true, 

); 
wp_tag_cloud($args); 
+0

probabilmente l'unico modo per fare questo dato come vengono memorizzati i tag, ma diventerà molto lento con il crescere del numero di post ... – Kasumi

+0

Grazie! Assicurati di terminare la riga "$ posttag = get_the_tags()" con un punto e virgola. Ho ottenuto questo lavoro con il widget PHP eseguibile e circondando il tutto con . Esempio: http://www.priestessastrology.com/ – Zade

+0

@Zade Ho aggiunto il punto e virgola. Sentiti libero di modificare le risposte con errori di sintassi su Stack Overflow una volta che hai il karma adeguato per le autorizzazioni! – artlung

0

penso che si può guardare alcuni dei plugin e vedere se si dispone di un plugin come quello che vi serve

0

Yo può ottenere la lista di tag con una query in modo da non dover fare una loop lancia l'ultimo post di X.

<ul id="footer-tags"> 
<?php $wpdb->show_errors(); ?> 
<?php 
global $wpdb; 
$term_ids = $wpdb->get_col(" 
    SELECT term_id FROM $wpdb->term_taxonomy 
    INNER JOIN $wpdb->term_relationships ON $wpdb->term_taxonomy.term_taxonomy_id=$wpdb->term_relationships.term_taxonomy_id 
    INNER JOIN $wpdb->posts ON $wpdb->posts.ID = $wpdb->term_relationships.object_id 
    WHERE DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= $wpdb->posts.post_date"); 

if(count($term_ids) > 0){ 

    $tags = get_tags(array(
    'orderby' => 'count', 
    'order' => 'DESC', 
    'number' => 28, 
    'include' => $term_ids, 
)); 
foreach ((array) $tags as $tag) { 
echo '<li><a href="' . get_tag_link ($tag->term_id) . '" rel="tag">' . $tag->name . '</a></li>'; 
} 
} 
?> 
</ul> 
Problemi correlati