-
functions.php ファイルに完全に SQL_CALC_FOUND_ROWS を無効にします。
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 を効果的に無効にするために、以下のコードを 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)
{
// シングルページの場合は処理を行わない
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 );
オリジナルのリンク:https://zhujicankao.com/66624.html