2010-05-31 6 views
6

He estado buscando desde hace bastante tiempo para encontrar una forma de limitar las etiquetas de wordpress por fecha y ordenarlas por la cantidad de veces que aparecieron en el marco de tiempo seleccionado. Pero he sido bastante insatisfactorio.¿Cómo limitar el wordcloud de wordpress por fecha?

Lo que estoy tratando de lograr es algo así como los temas de moda en Twitter. Pero en este caso, 'etiquetas de tendencia'. Por defecto, wordpress tagcloud muestra las etiquetas más populares de todos los tiempos. Lo cual no tiene sentido en mi caso, ya que quiero hacer un seguimiento de las tendencias actuales.

Lo ideal sería algo así como:

etiquetas más populares de hoy en día

  • Obama (18 menciones)
  • Nueva York (15 menciones)
  • Iron Man (11 menciones)
  • Robin Hood (7 menciones)

Y luego multiplicado por "más popular esta semana" y "más popular este mes". ¿Alguien sabe de una manera de lograr esto?

Respuesta

0

Estoy bastante seguro de que Tags no tiene marcas de tiempo; ¿quizás podrías buscar publicaciones con etiquetas específicas para un determinado período de tiempo?

+0

De hecho, no tienen marcas de tiempo. Sin embargo, dado que están relacionados con las publicaciones y las publicaciones tienen una marca de tiempo, pensé que debería ser posible recuperar esas marcas de tiempo. Sin embargo, tu respuesta me hizo pensar. ¿No sería más fácil simplemente agregar una tabla de marca de tiempo a las etiquetas? – Nordin

3

De acuerdo, entonces lo que creo que probablemente quiera es hacer esto por decir, las últimas 50 publicaciones.

Loop en los últimos n mensajes, extraer la term_id de cada etiqueta para cada puesto, a continuación, pasar esa cadena en el argumento include de 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

probablemente sea la única forma de hacerlo, dado cómo se almacenan las etiquetas, pero se volverá realmente lento a medida que crezca la cantidad de publicaciones ... – Kasumi

+0

¡Gracias! Asegúrese de terminar la línea "$ posttags = get_the_tags()" con un punto y coma. Lo hice trabajando con el widget Executable PHP y rodeándolo todo con . Ejemplo: http://www.priestessastrology.com/ – Zade

+0

@Zade He agregado el punto y coma. ¡Siéntase libre de editar respuestas con errores de sintaxis en Stack Overflow una vez que tenga el karma adecuado para los permisos! – artlung

0

creo que se puede ver en algunos de los plugins y ver si dispone de un plug-in como lo que se necesita

0

Yo puede obtener la lista de etiquetas con una consulta por lo que no tiene que hacer una loop lanza la última publicación de 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> 
Cuestiones relacionadas