繁体   English   中英

WordPress存档菜单导致加载时间缓慢

[英]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
" );

然后,您将具有一个对象数组,其中包含可以迭代的yearmonthcount属性。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM