2010-06-04 110 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

相关问题