Wie schränke ich die WordPress-Tagcloud nach Datum ein?

Lesezeit: 4 Minuten

Ich suche schon seit geraumer Zeit nach einer Möglichkeit, WordPress-Tags nach Datum zu begrenzen und sie nach der Häufigkeit zu ordnen, mit der sie im ausgewählten Zeitraum erschienen sind. Aber ich war ziemlich erfolglos.

Was ich versuche zu erreichen, ist so etwas wie die Trending Topics auf Twitter. Aber in diesem Fall „Trend-Tags“. Standardmäßig zeigt die WordPress-Tagcloud die beliebtesten Tags aller Zeiten an. Was in meinem Fall keinen Sinn macht, da ich aktuelle Trends verfolgen möchte.

Idealerweise wäre es so etwas wie:

Die beliebtesten Tags von heute

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

Und dann multipliziert für „beliebtest in dieser Woche“ und „beliebtest in diesem Monat“. Kennt jemand eine Möglichkeit, dies zu erreichen?

Benutzer-Avatar
Artlung

Okay, ich denke, Sie möchten dies wahrscheinlich für die letzten 50 Beiträge tun.

Schleife über die letzte n Beiträge, extrahieren Sie die term_id jedes Tags für jeden Beitrag, dann übergeben Sie diese Zeichenfolge an die include Argument von 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 );

  • wahrscheinlich die einzige Möglichkeit, dies zu tun, wenn man bedenkt, wie Tags gespeichert werden, aber es wird sehr langsam, wenn die Anzahl der Posts zunimmt …

    – Kasumi

    23. Juni 2010 um 9:11 Uhr

  • Vielen Dank! Achten Sie darauf, die Zeile „$posttags = get_the_tags()“ mit einem Semikolon abzuschließen. Ich habe das mit dem ausführbaren PHP-Widget zum Laufen gebracht und das Ganze mit umgeben. Beispiel: priestessastrology.com

    – Zade

    27. Februar 2012 um 23:21 Uhr


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

    – Artlung

    28. Februar 2012 um 1:14 Uhr

Ich bin mir ziemlich sicher, dass Tags keine Zeitstempel haben – vielleicht könnten Sie nach Beiträgen mit bestimmten Tags für einen bestimmten Zeitraum suchen?

  • Sie haben tatsächlich keine Zeitstempel. Da sie sich jedoch auf Posts beziehen und Posts einen Zeitstempel haben, dachte ich, dass es möglich sein sollte, diese Zeitstempel abzurufen. Deine Antwort hat mich aber nachdenklich gemacht. Wäre es nicht am einfachsten, den Tags einfach eine Zeitstempeltabelle hinzuzufügen?

    – Nordin

    1. Juni 2010 um 13:10 Uhr


Ich denke, Sie können sich einige der Plugins ansehen und sehen, ob Sie ein Plugin haben, das dem entspricht, was Sie brauchen

Sie können die Tag-Liste mit einer Abfrage abrufen, sodass Sie keine Schleife machen müssen, um den letzten X-Post zu werfen.

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

1369310cookie-checkWie schränke ich die WordPress-Tagcloud nach Datum ein?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy