如何在 Wordpress 中获取一天中的平均 post 时间(小时)?
How to get the average post-time (hour) of day in Wordpress?
我试图构建一个页面(模板)来显示我的 "Writing behavior" 我的博客。为了显示一天中我最 post 的时间,我需要计算 "average post-time (hour) of day",这样我就可以知道 "uh I usually post blog in the morning..."
我想到的第一个想法是将所有 "time(hours)" 相加,然后除以 "total post count",然后转换为 24 小时制显示,但我的代码似乎不起作用。
我写的核心代码是这样的:
<?php
$alltimes=$wpdb->get_var($wpdb->prepare("SELECT sum(post_date) FROM $wpdb->posts WHERE post_type = 'post'", $alltimes));
echo '<p>Total post count '.$published_posts.'</p>';
$count_posts = wp_count_posts(); $published_posts = $count_posts->publish;
$averagetime= $alltimes / $published_posts;
echo '<p>Average Time count is '.$averagetime.'</p>';
echo'<p>Average time is '.date('Y-m-d h:i:s',$averagetime).'</p>';
?>
我的错误是年、月、日、小时、秒.. 全部加起来是“$alltimes”,所以当我除时它会变成一场灾难。
也许如果我能在 "post_date" 中得到 "hour" 但不是整个 "post_date" 就能完成这项工作,但如何做到?
感谢您的宝贵时间。
我认为您正在寻找这样的查询。我正在使用 HOUR()
和 DATE()
从日期时间值中提取日期和小时部分:
SELECT HOUR(post_date) hour, COUNT(*) posts FROM wp_posts
WHERE post_type = 'post' && DATE(post_date) = DATE(NOW())
GROUP BY hour
ORDER BY posts DESC;
这将显示一天中不同时间发布了多少帖子,请注意这只会 return 行 post_date
匹配当前日期。如果您想根据所有帖子获得最多的时间,您只需删除 DATE(post_date) = DATE(NOW())
条件:
+------+-------+
| hour | posts |
+------+-------+
| 18 | 15 |
| 19 | 12 |
| 21 | 2 |
+------+-------+
如果您只想获取包含帖子数量最多的那一小时的一行,这行得通:
SELECT hour, MAX(posts) posts FROM (
SELECT HOUR(post_date) hour, COUNT(*) posts FROM wp_posts
WHERE post_type ='post' && DATE(post_date) = DATE(NOW())
GROUP BY hour ORDER BY posts DESC
) v;
或者像这样:
SELECT HOUR(post_date) hour, COUNT(*) posts FROM wp_posts
WHERE post_type = 'post' && DATE(post_date) = DATE(NOW())
GROUP BY hour
ORDER BY posts DESC
LIMIT 1
我试图构建一个页面(模板)来显示我的 "Writing behavior" 我的博客。为了显示一天中我最 post 的时间,我需要计算 "average post-time (hour) of day",这样我就可以知道 "uh I usually post blog in the morning..."
我想到的第一个想法是将所有 "time(hours)" 相加,然后除以 "total post count",然后转换为 24 小时制显示,但我的代码似乎不起作用。
我写的核心代码是这样的:
<?php
$alltimes=$wpdb->get_var($wpdb->prepare("SELECT sum(post_date) FROM $wpdb->posts WHERE post_type = 'post'", $alltimes));
echo '<p>Total post count '.$published_posts.'</p>';
$count_posts = wp_count_posts(); $published_posts = $count_posts->publish;
$averagetime= $alltimes / $published_posts;
echo '<p>Average Time count is '.$averagetime.'</p>';
echo'<p>Average time is '.date('Y-m-d h:i:s',$averagetime).'</p>';
?>
我的错误是年、月、日、小时、秒.. 全部加起来是“$alltimes”,所以当我除时它会变成一场灾难。
也许如果我能在 "post_date" 中得到 "hour" 但不是整个 "post_date" 就能完成这项工作,但如何做到?
感谢您的宝贵时间。
我认为您正在寻找这样的查询。我正在使用 HOUR()
和 DATE()
从日期时间值中提取日期和小时部分:
SELECT HOUR(post_date) hour, COUNT(*) posts FROM wp_posts
WHERE post_type = 'post' && DATE(post_date) = DATE(NOW())
GROUP BY hour
ORDER BY posts DESC;
这将显示一天中不同时间发布了多少帖子,请注意这只会 return 行 post_date
匹配当前日期。如果您想根据所有帖子获得最多的时间,您只需删除 DATE(post_date) = DATE(NOW())
条件:
+------+-------+
| hour | posts |
+------+-------+
| 18 | 15 |
| 19 | 12 |
| 21 | 2 |
+------+-------+
如果您只想获取包含帖子数量最多的那一小时的一行,这行得通:
SELECT hour, MAX(posts) posts FROM (
SELECT HOUR(post_date) hour, COUNT(*) posts FROM wp_posts
WHERE post_type ='post' && DATE(post_date) = DATE(NOW())
GROUP BY hour ORDER BY posts DESC
) v;
或者像这样:
SELECT HOUR(post_date) hour, COUNT(*) posts FROM wp_posts
WHERE post_type = 'post' && DATE(post_date) = DATE(NOW())
GROUP BY hour
ORDER BY posts DESC
LIMIT 1