我根本不熟悉wordpress架构,我需要从wordpress数据库的任何帖子中找回一个列表或最新标签的数组。
我只需要主页上提供的数据,然后我可以操作它。
所有功能似乎都是为了每个帖子而设计的。
(Wordpress真的让我为常见的wordpress程序员感到遗憾。)
答案 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 BY
或HAVING
来修复此问题,而不会弄乱日期顺序。
所以可能会使用一个例子;
$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
。