2012-04-10 13 views
0

Wordpressの大規模なDBを使用しているときに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に設定されている、あなたはゼロで$wp_query->found_postsを分割するPHPを求めていること。もちろん、これはできません。私はあなたのコードでこのvarがどこに設定されているのかわかりませんが(WPはこれを処理していますか?)、その行の前にprint_r $wp_query->query_vars['posts_per_page'];を追加することでこれを確認するのは簡単です。

関連する問題