[英]Wordpress archive menu causing slow load times
我整理了这个存档菜单,但是这导致页面加载速度非常慢。
我认为是罪魁祸首:
PHP
$years = $wpdb->get_col(
"SELECT DISTINCT YEAR(post_date)
FROM $wpdb->posts
WHERE post_status = 'publish'
AND post_type = 'post'
ORDER BY post_date
DESC");
$months = $wpdb->get_col(
"SELECT DISTINCT MONTH(post_date)
FROM $wpdb->posts
WHERE post_status = 'publish'
AND post_type = 'post'
AND YEAR(post_date) = '".$year."' ORDER BY post_date DESC");
我正在使用此数据来回显日期和帖子计数列表,此方法是否有问题,导致它变慢,还有更好的方法吗?
此功能的目的是让我显示发布过的年份和月份,因此显示了自己的小存档侧边栏。
为了做类似的事情:
foreach($years as $year){
//..do something
foreach($months as $month) {
//... do something
}
}
我目前有1507个帖子,加载存档页面大约需要15秒钟的时间。 同样,我的操作方式有问题吗?
作为间接答案,您可能希望查看wp_get_archives()
函数,而不是滚动自己的代码。
为了专门回答您的问题,这里的问题是您的第二个查询每年由第一个查询返回一次,因此您可能每个月都要进行另一个查询以确定帖子数。 您应该执行一次查询,一次获取所有年,月和计数。
$dates = $wpdb->get_results( "
SELECT YEAR( post_date ) AS year, MONTH( post_date ) AS month, count(*) as count
FROM $wpdb->posts
WHERE post_type = 'post'
AND post_status = 'publish'
GROUP BY year, month
ORDER BY post_date DESC
" );
然后,您将具有一个对象数组,其中包含可以迭代的year
, month
和count
属性。
foreach ( $dates as $date ) {
// For example:
echo '<p>' . $date->month . '/' . $date->year . ': ' . $date->count . '</p>';
}
这种方法将总是很慢并且不会扩展。 您对查询没有限制,因此它要么全部获取,要么运行直到超时。 更糟糕的是,没有限制地运行2个查询。
无论哪种方式都不好。
您应该使用WordPress的内置存档功能或具有限制和分页的自定义WP_Query。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.