WordPress sayfalama (pagination) konusunda "SQL_CALC_FOUND_ROWS" SQL yapısını kullanmaktadır. Bu durum ise, özellikle binlerce yazı veya resim bulunan sitelerde, sayfalar arasında geçişlerde, yavaşlığa sebep olmaktadır. Bu yüzden, özellikle büyük sitelerde, bu yapıyı kullanmak, oldukça yavaşlığa sebep olacaktır. Yaptığım uzun saatler süren araştırmalar neticesinde, bu durumdan kurtulmanın ve daha hızlı sorgular için sizlerle bir kod dizisi paylaşıyor olacağım. Aşağıdaki kodları değiştirmeden, temanızın functions.php dosyası içerisine eklemeniz yeterli olacaktır. Böylelikle, web sitenizdeki bilhassa sayfalama sorguları oldukça fazla hızlı tepki vermeye başlayacaktır.
AYRICA: DNS Prefetch ile WordPress'in Hızını Artıralım
WordPress Sorgularını Hızlandırmak için Mucize Yöntem
if ( ! function_exists( 'wpartisan_set_no_found_rows' ) ) :
function wpartisan_set_no_found_rows( \WP_Query $wp_query ) {
$wp_query->set( 'no_found_rows', true );
}
endif;
add_filter( 'pre_get_posts', 'wpartisan_set_no_found_rows', 10, 1 );
if ( ! function_exists( 'wpartisan_set_found_posts' ) ) :
function wpartisan_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 = $wpdb->get_var( "SELECT $distinct COUNT(*) FROM {$wpdb->posts} $join WHERE 1=1 $where" );
$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;
}
endif;
add_filter( 'posts_clauses', 'wpartisan_set_found_posts', 10, 2 );
Merhaba, bilgi için teşekkürler
iyi çalışmalar