如何获取wordpress数据库中最新标签的列表?

时间:2010-06-04 08:26:24

标签: wordpress tags

我根本不熟悉wordpress架构,我需要从wordpress数据库的任何帖子中找回一个列表或最新标签的数组。

我只需要主页上提供的数据,然后我可以操作它。

所有功能似乎都是为了每个帖子而设计的。

(Wordpress真的让我为常见的wordpress程序员感到遗憾。)

2 个答案:

答案 0 :(得分: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”的术语,并且当前与帖子有关系,然后按帖子的日期排序,降序。 / p>

您可能会多次在结果集中获得相同的字词,但我无法弄清楚如何使用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

答案 1 :(得分: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

这是我写的一个解决方法 - 确保它可以使它更清晰! - 根据关联标记&lt; - &gt; post的日期构建标记站点地图(XML,需要<LOC&><LASTMOD> ...)。您可以在查询结束时添加LIMIT 0,10以仅查看最后10个关联的代码。

此查询将返回您可能在许多方面使用的三列(名称,段塞和单个标记的最后关联日期)。

请记住,wp_是WordPress中的默认dB前缀。您必须使用$wpdb->更改每个匹配项(请参阅TheDeadMedic's answer),并确保在查询之前设置$wpdb