Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress SQL_CALC修复导致PHP错误_Php_Mysql_Wordpress - Fatal编程技术网

Wordpress SQL_CALC修复导致PHP错误

Wordpress SQL_CALC修复导致PHP错误,php,mysql,wordpress,Php,Mysql,Wordpress,我正在寻找Wordpress的一个老主题的后续内容,在这个主题中,当Wordpress中有一个较大的DB时,发现SQL_CALC会减慢速度。我一直在使用这篇文章底部的代码来绕过它,但它确实在我的错误日志中生成了一个错误。如何防止此错误 PHP Warning: Division by zero in /var/www/vhosts/domain.com/httpdocs/wp-content/themes/greatTheme/functions.php on line 19 原始线程:

我正在寻找Wordpress的一个老主题的后续内容,在这个主题中,当Wordpress中有一个较大的DB时,发现SQL_CALC会减慢速度。我一直在使用这篇文章底部的代码来绕过它,但它确实在我的错误日志中生成了一个错误。如何防止此错误

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

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

大概
$wp\u query->query\u vars['posts\u per\u page']
设置为0,这意味着您要求PHP将
$wp\u query->found\u posts
除以0。当然,这是不可能做到的。我不知道在你的代码中这个变量是在哪里设置的(WP正在处理这个问题吗?),但是通过添加一个
print\r$WP\u query->query\u vars['posts\u per\u page']很容易确认这一点在该行之前

根据@Daan的建议,我尝试了以下方法,但没有产生任何错误:

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;
}
add_filter('pre_get_posts','optimized_get_posts',100);
函数优化_get_posts(){
全局$wp_查询,$wpdb;
$wp\u query->query\u vars['no\u found\u rows']=1;
$wp_query->found_posts=$wpdb->get_var(“从wp_posts中选择COUNT(*),其中1=1,wp_posts.post_type='post'和(wp_posts.post_status='publish'或wp_posts.post_status='private');
$wp_query->found_posts=apply_filters_ref_数组('found_posts',数组($wp_query->found_posts,&$wp_query));
如果($wp\u query->query\u vars['posts\u per\u page']max\u num\u pages=0;
}否则{
$wp\u query->max\u num\u pages=ceil($wp\u query->found\u posts/$wp\u query->query\u vars['posts\u per\u page']);
}
返回$wp_查询;
}
基本上,代码检查
$wp\u query->query\u vars['posts\u per\u page']
是否有正值,因此可以适当地划分
$wp\u query->found\u posts