2010-05-31 27 views
6

Szukałem już od jakiegoś czasu, aby znaleźć sposób na ograniczenie tagów wordpress według daty i zamówienia ich przez ilość razy pojawiły się w wybranym okresie. Ale byłem raczej nieudany.Jak ograniczyć tagcloud wordpress według daty?

To, co próbuję osiągnąć, to coś w rodzaju popularnych tematów na Twitterze. Ale w tym przypadku "znaczniki zysku". Domyślnie tagcloud wordpress wyświetla najbardziej popularne tagi wszechczasów. Co nie ma sensu w moim przypadku, ponieważ chcę śledzić obecne trendy.

Idealnie byłoby coś takiego:

Najbardziej popularne tagi dzisiaj

  • Obama (18 wskazań)
  • Nowy Jork (15 wskazań)
  • Iron Man (11 wskazań)
  • Robin Hood (7 wzmianek)

A następnie pomnożone przez "najbardziej popularne w tym tygodniu" i "najbardziej popularne w tym miesiącu". Czy ktoś wie, jak to osiągnąć?

Odpowiedz

0

Jestem prawie pewien, że tagi nie mają znaczników czasu - być może mógłbyś wyszukać posty z określonymi znacznikami przez pewien okres czasu?

+0

Rzeczywiście nie mają znaczników czasu. Jednak ponieważ są one związane z postami, a posty mają znacznik czasu, pomyślałem, że powinno być możliwe pobranie tych znaczników czasu. Twoja odpowiedź mnie jednak zastanowiła. Czy nie byłoby łatwiej po prostu dodać tabelę znaczników czasu do znaczników? – Nordin

3

Okay, więc myślę, że prawdopodobnie chcesz to zrobić, powiedzmy, ostatnie 50 postów.

Loop ciągu ostatnich n stanowisk, wyodrębnić term_id każdego tagu dla każdego posta, a następnie przekazać ten ciąg do include argument 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

to chyba jedyny sposób, aby to zrobić, biorąc pod uwagę sposób przechowywania tagów, ale stanie się naprawdę powolny, ponieważ liczba postów rośnie ... – Kasumi

+0

Dzięki! Koniec linii "$ posttags = get_the_tags()" ze średnikiem. Zrobiłem to działając z widżetem Wykonywalny PHP i otaczając całość z . Przykład: http://www.priestessastrology.com/ – Zade

+0

@Zade Dodałem średnik. Zapraszam do edycji odpowiedzi z błędami składni na Stack Overflow, gdy już masz odpowiednią karmę dla uprawnień! – artlung

0

myślę, że można spojrzeć na niektóre z wtyczek i sprawdzić, czy masz wtyczki jak co trzeba

0

Yo można uzyskać listę tagów z kwerendy, dzięki czemu nie trzeba zrobić pętla wyrzuć ostatni X post.

<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>