2010-06-04 95 views
1

我並不熟悉wordpress模式,我需要從wordpress數據庫中的任何文章中找回列表或最近標記的數組。如何獲取wordpress數據庫中最新標籤的列表?

我只需要主頁上的數據,然後我就可以操作它。

所有功能似乎都設計爲按照每個帖子進行工作。

(WordPress的真的讓我感到頻繁的WordPress程序員抱歉。)

回答

2

這是不漂亮,也許是一個MySQL迷可以優化它一點;

SELECT $wpdb->terms.term_id, $wpdb->terms.name, $wpdb->terms.slug 
FROM $wpdb->terms 
    INNER JOIN $wpdb->term_taxonomy ON ($wpdb->terms.term_id = $wpdb->term_taxonomy.term_id) 
    INNER JOIN $wpdb->term_relationships ON ($wpdb->terms.term_id = $wpdb->term_relationships.term_taxonomy_id) 
    INNER JOIN $wpdb->posts ON ($wpdb->term_relationships.object_id = $wpdb->posts.ID) 
WHERE $wpdb->term_taxonomy.taxonomy = 'post_tag' 
ORDER BY $wpdb->posts.post_date DESC 

這基本上加入術語,術語的分類,合作關係,並交表一起,讓那些在分類學「post_tag」方面,目前有與後的關係,然後通過郵寄的日期,命令他們,下降。

您可能會在結果集中多次獲得相同的術語,但我無法弄清楚如何使用GROUP BYHAVING來解決此問題,而不會搞亂日期順序。

所以一個例子可能會在使用;

$tags= $wpdb->get_results($query); // $query being the above SQL 
foreach ($tags as $tag) { 
    if (!isset($stack[$tag->term_id])) 
     $stack[$tag->term_id] = $tag; 
} 
print_r($stack); // should print an array of all tags, ordered by last used 
+0

謝謝你。我不得不爲查詢添加一個DISTINCT,或者加入與帖子無關的標籤。 – Failpunk 2010-06-06 23:09:33

2
SELECT name, slug, tag_history.tagdate 
FROM (SELECT wp_term_relationships.term_taxonomy_id AS tagid, 
    substr(wp_posts.post_date_gmt,1,10) AS tagdate 
    FROM wp_term_relationships 
    INNER JOIN wp_term_taxonomy ON wp_term_taxonomy.term_taxonomy_id=wp_term_relationships.term_taxonomy_id 
    INNER JOIN wp_posts ON wp_posts.ID=wp_term_relationships.object_id 
    WHERE taxonomy='post_tag' ORDER BY post_date_gmt DESC, wp_posts.post_title) 
AS tag_history 
INNER JOIN wp_terms ON wp_terms.term_id=tag_history.tagid 
GROUP BY tag_history.tagid 
ORDER BY tag_history.tagdate DESC 

這是我寫的一個解決辦法 - 相信這是可能使它更清晰! - 根據關聯標記日期< - > post創建標記站點地圖(XML,需要<LOC&><LASTMOD> ...)。您可以在查詢結尾處添加一個LIMIT 0,10以僅查看最後10個關聯標籤。

此查詢將返回您可能以多種方式使用的三列(單個標籤的LAST關聯的名稱,slug和日期)。

請記住,wp_是WordPress中默認的dB前綴。您必須用$wpdb->(請參閱TheDeadMedic's answer)更改每次出現的內容,並務必在查詢前設置$wpdb

相關問題