2012-04-10 4 views
0

Ich bin auf der Suche nach einem Nachfolger für ein älteres Thema für Wordpress wo SQL_CALC wurde gefunden, um Dinge zu verlangsamen, wenn Sie eine große DB in Wordpress haben. Ich habe den Code am Ende dieses Beitrags verwendet, um es zu umgehen, aber es erzeugt einen Fehler in meinem Fehlerprotokoll. Wie würde ich diesen Fehler verhindern?Wordpress SQL_CALC-Fehler verursacht PHP-Fehler

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

Das ursprüngliche Thema: http://wordpress.org/support/topic/slow-queries-sql_calc_found_rows-bringing-down-site?replies=25

Der Code in meinem 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; 
} 

Antwort

1

Basierend auf @ Daan Vorschlag, habe ich versucht, den folgenden und es keine Fehler produziert hat:

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; 
} 

Grundsätzlich den Code überprüft, ob $wp_query->query_vars['posts_per_page'] einen positiven Wert hat und daher zu teilen wäre in der Lage $wp_query->found_posts entsprechend.

1

Vermutlich $wp_query->query_vars['posts_per_page']-0 gesetzt ist, was bedeutet, dass Sie PHP fragen $wp_query->found_posts Division durch Null . Natürlich kann dies nicht getan werden. Ich weiß nicht, wo in Ihrem Code diese Var gesetzt wird (ist WP das?), Aber es ist einfach, dies zu bestätigen, indem Sie eine print_r $wp_query->query_vars['posts_per_page']; vor dieser Zeile hinzufügen.