秋硕学习笔记 教程 优化WordPress文章过多导致网站卡顿

优化WordPress文章过多导致网站卡顿

方法一:完全禁用 SQL_CALC_FOUND_ROWS,将代码放到 functions.php 文件中: a…

方法一:完全禁用 SQL_CALC_FOUND_ROWS,将代码放到 functions.php 文件中:

add_action('pre_get_posts', 'wndt_post_filter');
function wndt_post_filter($query) {
if (is_admin() or !$query->is_main_query()) {
return $query;
}
 
// 禁止查询 SQL_CALC_FOUND_ROWS
$query->set('no_found_rows', true);
}

方法二、如果需要查询文章数,请使用EXPLAIN 方法代替 SQL_CALC_FOUND_ROWS,禁用 SQL_CALC_FOUND_ROWS。这里使用 EXPLAIN 方法。将代码放在 functions.php 文件中:

if ( ! function_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
*/
function 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 ( ! function_exists( 'zjck_set_found_posts' ) ) {
/**
* 使用 EXPLAIN 方式重构
*/
function 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 );

本文是全系列中第5 / 14篇:优化加速

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。若本站内容侵犯了原著者的合法权益,请联系我们进行处理。本文地址:https://wparticle.cn/1369.html

作者: wordus

记录生活感悟,分享网络资源,交流学习体会,感受美好人生。秋硕学习笔记,记录分享学习、生活、工作、旅游、健身、爱好的个人博客。
返回顶部