最新公告
  • 本站一直秉承服务宗旨:履行“站长”责任,销售只是起点 服务永无止境!”的经营理念立即加入
  • 快速解决WordPress文章过多导致网站卡顿的问题

    你有没有注意到,当你使用WordPress作为程序时,文章会越来越,不优化就不行。今天给大家分享一下WP的数据库SQL优化方法。根据 主机参考 的经验,大多数 WordPress 网站都有数百到数千篇文章。此时,普通用户不会对网站的打开速度感到任何异常。但是如果WordPress网站的文章数量超过10万,即使网站服务器的配置很强大,网站的打开速度基本上也会很慢。

    这是因为 WordPress 在查询文章列表时,默认也会查询文章数。这对于少量的网站数据应该不会造成任何问题,但是对于大量的文章是不可避免的。慢查询。主机引用的一位用户告诉我们,他的网站有40万篇文章,打开首页需要一两分钟,甚至首页或文章页也经常打不开。

    WordPress网站查询慢的原因:WordPress在查询帖子列表时,默认也会查询帖子数。使用此方法:get_posts、query_posts 和 WP_Query。get_posts在4.6.1+中没有使用SQL_CALC_FOUND_ROWS,但是query_posts和WP_Query仍然使用,所以需要优化。

    那么如何解决WordPress文章过多导致网站慢的问题呢?解决方法有两种,优化WordPress的查询功能,完美解决了这个问题。

    方法一:插件模块,仅2KB【推荐】
    进入WordPress后台-插件-安装插件-上传插件,安装激活插件,无需额外设置

    下载地址:https://zhujicankao.com/img/images/0e4b1cdfa4f1aeb.zip

    方法二:纯代码模式
    1、完全禁用SQL_CALC_FOUND_ROWS,放到functiоns.php文件中

    add_action('pre_get_posts', 'wndt_post_filter');
    functiоn wndt_post_filter($query) {
    if (is_admin() or !$query->is_main_query()) {
    return $query;
    }

    // 禁止查询 SQL_CALC_FOUND_ROWS
    $query->set('no_found_rows', true);
    }

    2、如果您还需要查询文章数,请使用更高效的EXPLAIN方法代替SQL_CALC_FOUND_ROWS,以更高效的方式禁用SQL_CALC_FOUND_ROWS。这里我们使用 EXPLAIN 方法。具体代码如下,放在functiоns.php文件中

    ```php
    if ( ! functiоn_exists( 'zjck_set_no_found_rows' ) ) {
    /**
    * 设置WP_Query的 'no_found_rows' 属性为true,禁用SQL_CALC_FOUND_ROWS
    *
    * @param WP_Query $wp_query WP_Query实例
    * @return void
    */
    functiоn zjck_set_no_found_rows(\WP_Query $wp_query)
    {
    $wp_query->set('no_found_rows', true);
    }
    }
    add_filter( 'pre_get_posts', 'zjck_set_no_found_rows', 10, 1 );

    if ( ! functiоn_exists( 'zjck_set_found_posts' ) ) {
    /**
    * 使用 EXPLAIN 方式重构
    */
    functiоn zjck_set_found_posts($clauses, \WP_Query $wp_query)
    {
    // Don't proceed if it's a singular page.
    if ($wp_query->is_singular()) {
    return $clauses;
    }

    global $wpdb;

    $where = isset($clauses['where']) ? $clauses['where'] : '';
    $join = isset($clauses['join']) ? $clauses['join'] : '';
    $distinct = isset($clauses['distinct']) ? $clauses['distinct'] : '';

    $wp_query->found_posts = (int)$wpdb->get_row("EXPLAIN SELECT $distinct * FROM {$wpdb->posts} $join WHERE 1=1 $where")->rows;

    $posts_per_page = (!empty($wp_query->query_vars['posts_per_page']) ? absint($wp_query->query_vars['posts_per_page']) : absint(get_option('posts_per_page')));

    $wp_query->max_num_pages = ceil($wp_query->found_posts / $posts_per_page);

    return $clauses;
    }
    }
    add_filter( 'posts_clauses', 'zjck_set_found_posts', 10, 2 );

     

    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如有侵权麻烦联系邮箱2697381891@qq.com删除文章!

    源码库 » 快速解决WordPress文章过多导致网站卡顿的问题
    • 3052会员总数(位)
    • 37766资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 1200稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情