2010-05-31 12 views
6

Ich habe schon eine ganze Weile gesucht, um eine Möglichkeit zu finden, Wordpress-Tags nach Datum zu begrenzen und sie so zu ordnen, wie oft sie im ausgewählten Zeitraum erschienen sind. Aber ich war ziemlich erfolglos.Wie begrenzt man die WordPress-Tagcloud nach Datum?

Was ich versuche zu erreichen, ist etwas wie die Trendthemen auf Twitter. Aber in diesem Fall "Trending Tags". Standardmäßig zeigt WordPress tagcloud die beliebtesten Tags aller Zeiten an. Das macht in meinem Fall keinen Sinn, da ich aktuelle Trends verfolgen möchte.

Idealfall wäre es so etwas wie:

Populärste Tags von heute

  • Obama (18 Nennungen)
  • in New York (15 Nennungen)
  • Iron Man (11 Nennungen)
  • Robin Hood (7 Erwähnungen)

Und dann multipliziert mit "Beliebteste diese Woche" und "Beliebteste diesen Monat". Kennt jemand einen Weg, dies zu erreichen?

Antwort

0

Ich bin mir ziemlich sicher, dass Tags keine Zeitstempel haben - vielleicht könnten Sie nach Posts mit bestimmten Tags für eine bestimmte Zeitperiode suchen?

+0

Sie haben tatsächlich keine Zeitstempel. Da sie jedoch mit Posts in Verbindung stehen und Posts einen Zeitstempel haben, dachte ich, dass es möglich sein sollte, diese Zeitstempel abzurufen. Deine Antwort brachte mich zum Nachdenken. Wäre es nicht einfacher, nur eine Timestamp-Tabelle zu Tags hinzuzufügen? – Nordin

3

Okay, also was ich denke, dass Sie wahrscheinlich wollen, ist dies für sagen, die letzten 50 Beiträge zu tun.

Schleife über die letzten n Pfosten, extrahiert die term_id jedes Etikett für jede Stelle, passiert dann die Zeichenkette in das 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

wahrscheinlich die einzige Möglichkeit, dies zu tun, da Tags gespeichert sind, aber wird wirklich langsam wie die Anzahl der Post wächst ... – Kasumi

+0

Vielen Dank! Achten Sie darauf, die Zeile "$ posttags = get_the_tags()" mit einem Semikolon zu beenden. Ich habe das mit dem ausführbaren PHP-Widget arbeiten und die ganze Sache mit umgeben. Beispiel: http://www.priestinessastrology.com/ – Zade

+0

@Zade Ich habe das Semikolon hinzugefügt. Fühlen Sie sich frei, Antworten mit Syntaxfehlern auf Stack Overflow zu bearbeiten, sobald Sie über ausreichend Karma für Berechtigungen verfügen! – artlung

0

ich glaube, Sie auf einige der Plugins schauen und sehen, ob Ihr ein Plugin wie das, was Sie brauchen

0

Yo können die Tag-Liste mit einer Abfrage, so dass Sie ein nicht machen müssen Schleife wirft den letzten 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> 
Verwandte Themen