2010-05-31 41 views
6

Tôi đã tìm kiếm khá lâu để tìm cách giới hạn thẻ wordpress theo ngày và sắp xếp chúng theo số lần chúng xuất hiện trong khung thời gian đã chọn. Nhưng tôi đã khá không thành công.Làm thế nào để hạn chế tagcloud wordpress theo ngày?

Điều tôi đang cố gắng đạt được giống như các chủ đề thịnh hành trên Twitter. Nhưng trong trường hợp này, 'các thẻ xu hướng'. Theo mặc định, tagcloud wordpress hiển thị các thẻ phổ biến nhất mọi thời đại. Điều này không có ý nghĩa gì trong trường hợp của tôi, vì tôi muốn theo dõi các xu hướng hiện tại.

Lý tưởng nhất là nó sẽ là một cái gì đó như:

thẻ Phổ biến nhất ngày nay

  • Obama (18 đề cập đến)
  • New York (15 đề cập đến)
  • Iron Man (11 đề cập đến)
  • Robin Hood (7 đề cập)

Và sau đó nhân với 'phổ biến nhất trong tuần này' và 'phổ biến nhất trong tháng này'. Có ai biết một cách để đạt được điều này?

Trả lời

0

Tôi khá chắc chắn rằng Thẻ không có dấu thời gian - có lẽ bạn có thể thực hiện tìm kiếm các bài đăng có thẻ cụ thể cho một timeperiod nhất định?

+0

Chúng thực sự không có dấu thời gian. Tuy nhiên vì chúng có liên quan đến các bài đăng và các bài đăng có dấu thời gian, nên tôi nghĩ rằng có thể truy xuất các dấu thời gian đó. Câu trả lời của bạn đã cho tôi suy nghĩ mặc dù. Nó sẽ không dễ dàng nhất để chỉ cần thêm một bảng dấu thời gian vào thẻ? – Nordin

3

Được rồi, vì vậy điều tôi nghĩ bạn có thể muốn là làm điều này để nói, 50 bài đăng cuối cùng.

Vòng qua n bài đăng sau cùng, trích xuất term_id của mỗi thẻ cho mỗi bài đăng, sau đó chuyển chuỗi đó vào đối số include của 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

có lẽ là cách duy nhất để làm điều này cho cách thẻ được lưu trữ, nhưng sẽ trở nên thực sự chậm khi số lượng bài đăng tăng lên ... – Kasumi

+0

Cảm ơn! Đảm bảo kết thúc dòng "$ posttags = get_the_tags()" với dấu chấm phẩy. Tôi đã làm việc này với các widget PHP thực thi và xung quanh toàn bộ điều với . Ví dụ: http://www.priestessastrology.com/ – Zade

+0

@Zade Tôi đã thêm dấu chấm phẩy. Vui lòng chỉnh sửa câu trả lời với lỗi cú pháp trên Stack Overflow khi bạn có đủ nghiệp cho quyền! – artlung

0

Tôi nghĩ bạn có thể xem xét một số các plugin và xem nếu bạn có một plugin như những gì bạn cần

0

Yo có thể nhận được danh sách từ khóa với một truy vấn, do đó bạn không cần phải thực hiện một vòng lặp ném bài X cuối cùng.

<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> 
Các vấn đề liên quan