【问题标题】:Wordpress SQL_CALC fix causes PHP errorWordpress SQL_CALC 修复导致 PHP 错误
【发布时间】:2013-10-11 17:11:59
【问题描述】:

我正在寻找一些关于 Wordpress 的旧主题的后续内容,当您在 Wordpress 中拥有大型数据库时,发现 SQL_CALC 会减慢速度。我一直在使用这篇文章底部的代码来解决它,但它确实在我的错误日志中生成了一个错误。我该如何防止这个错误?

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

【问题讨论】:

    标签: php mysql wordpress


    【解决方案1】:

    根据@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;
    }
    

    基本上,代码会检查$wp_query-&gt;query_vars['posts_per_page'] 是否具有正值,因此能够适当地划分$wp_query-&gt;found_posts

    【讨论】:

      【解决方案2】:

      大概$wp_query-&gt;query_vars['posts_per_page'] 设置为0,这意味着您要求PHP 将$wp_query-&gt;found_posts 除以零。当然,这是做不到的。我不知道在你的代码中哪里设置了这个变量(WP 处理这个吗?)但很容易通过在该行之前添加一个print_r $wp_query-&gt;query_vars['posts_per_page']; 来确认这一点。

      【讨论】:

        猜你喜欢
        • 2019-06-01
        • 1970-01-01
        • 2022-06-15
        • 2012-09-22
        • 2011-10-08
        • 2023-03-11
        • 1970-01-01
        • 1970-01-01
        • 2012-08-13
        相关资源
        最近更新 更多