我正在寻找一种方法来在我的棒球博客上显示过去 30 天内最常用的标签,该博客基于 Wordpress。我不是编码员,但我想出了这个 mashup 来显示最常用的 28 个标签的列表(首选适合我的主题)。在我的一生中,我无法弄清楚如何将标签限制为过去 30 天内最常用的标签。
这是我所拥有的:
<ul id="footer-tags">
<?php
global $wpdb;
$term_ids = $wpdb->get_col("
SELECT DISTINCT term_taxonomy_id FROM $wpdb->term_relationships
INNER JOIN $wpdb->posts ON $wpdb->posts.ID = 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>
该网站的创建时间略短于约 4 周,因此为了进行测试,我更改INTERVAL 30 DAY
为INTERVAL 3 DAY
,返回的标签似乎是随机的,有些已超过 2 周未使用,并且仅使用过一次。同样,仅显示了 8 个标签,而更多标签已被使用。
为了检查是否查询了正确的天数,我执行了以下操作:
完全删除垃圾箱中的所有帖子和页面项目,我没有任何自定义帖子类型。
对草稿做了同样的事情。
在 phpmyadmin 中运行查询以删除所有帖子修订 -DELETE FROM wp_posts WHERE post_type = "revision";
在 phpmyadmin 中运行查询以检查结果是否是过去 3 天的帖子 -SELECT * from wp_posts WHERE DATE_SUB(CURDATE(), INTERVAL 3 DAY) <= post_date
phpmyadmin 查询的结果实际上是最近 3 天的帖子,但前端显示没有改变。
更新
这是一些屏幕截图。也许屏幕截图可以帮助找到我的代码错误的地方。
带有类别和标签的博客文章
wp_posts
与ID
上述职位的职位表
wp_terms
带有所term_id
用标签的表
wp_term_taxonomy
标签term_id
为term_taxonomy_id
wp_term_relationships
分配term_taxonomy_id
为发布为object_id
更新 2
我想我找到了问题所在,但不知道如何解决。
SQL 查询获取term_taxonomy_id
,而不是实际的标签 ID 并get_tag_link
使用term_id
更新 3
我最近创建了一个插件来显示最近使用的最流行的标签 - https://wordpress.org/plugins/recent-popular-tags/