2012-04-10 80 views
0

我正在尋找一些Wordpress舊主題的後續跟進,其中SQL_CALC被發現會在Wordpress中有一個大型數據庫時放慢速度。我一直在使用這篇文章底部的代碼來解決它,但它確實在我的錯誤日誌中產生了一個錯誤。我將如何防止此錯誤?Wordpress SQL_CALC修復會導致PHP錯誤

PHP Warning: Division by zero in /var/www/vhosts/domain.com/httpdocs/wp-content/themes/greatTheme/functions.php on line 19 

原帖: http://wordpress.org/support/topic/slow-queries-sql_calc_found_rows-bringing-down-site?replies=25

在我的functions.php代碼:

add_filter('pre_get_posts', 'optimized_get_posts', 100); 
function optimized_get_posts() { 
    global $wp_query, $wpdb; 

    $wp_query->query_vars['no_found_rows'] = 1; 
    $wp_query->found_posts = $wpdb->get_var("SELECT COUNT(*) FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')"); 
    $wp_query->found_posts = apply_filters_ref_array('found_posts', array($wp_query->found_posts, &$wp_query)); 
    $wp_query->max_num_pages = ceil($wp_query->found_posts/$wp_query->query_vars['posts_per_page']); 

    return $wp_query; 
} 

回答

1

基於@大安的建議下,我嘗試以下,並沒有產生任何錯誤:

add_filter('pre_get_posts', 'optimized_get_posts', 100); 
function optimized_get_posts() { 
    global $wp_query, $wpdb; 
    $wp_query->query_vars['no_found_rows'] = 1; 
    $wp_query->found_posts = $wpdb->get_var("SELECT COUNT(*) FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')"); 
    $wp_query->found_posts = apply_filters_ref_array('found_posts', array($wp_query->found_posts, &$wp_query)); 
    if($wp_query->query_vars['posts_per_page'] <= 0) { 
     $wp_query->max_num_pages = 0; 
    } else { 
     $wp_query->max_num_pages = ceil($wp_query->found_posts/$wp_query->query_vars['posts_per_page']); 
    } 
    return $wp_query; 
} 

基本上,代碼檢查,看是否$wp_query->query_vars['posts_per_page']具有積極價值,因此將能夠分裂$wp_query->found_posts

1

大概$wp_query->query_vars['posts_per_page']設置爲0,這意味着你問PHP除以零$wp_query->found_posts 。當然,這是無法完成的。我不知道在你的代碼中這個變量是在哪裏設置的(是WP處理這個變量的嗎?),但是通過在該行之前添加一個print_r $wp_query->query_vars['posts_per_page'];很容易確認。