首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止WP_Query->get_posts在类别页面上运行

停止WP_Query->get_posts在类别页面上运行
EN

Stack Overflow用户
提问于 2020-11-11 02:40:11
回答 1查看 148关注 0票数 0

我的一个网站有一个很大的问题。我有一个类别来存储其他类别。问题是WordPress使用WP_Query->get_posts并获取这个主分类页面上的所有帖子。尽管我删除了里面的所有内容,只留下了the_headerthe_footer,但它仍然执行查询。结构类似于此Category>Subcategory>posts。问题是WordPress正在对我的子类别中的所有帖子进行查询。

代码语言:javascript
复制
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
LEFT JOIN wp_term_relationships
ON (wp_posts.ID = wp_term_relationships.object_id)
WHERE 1=1
AND ( wp_term_relationships.term_taxonomy_id IN (13,14,15,24,25,26,27,28,29,102,130,154,256) )

查询比这个大得多,大约需要22秒才能加载。

我的代码运行良好,如果我在自定义页面中移动代码,它在0.80内加载,但在custom_category页面中,在22-28秒内加载。我想阻止SELECT SQL_CALC_FOUND_ROWS wp_posts.ID在此类别中运行。我不能改变关于网址的任何东西,因为该网站是在生产中,并有非常好的位置。我需要尽快做点什么,我已经没有主意了。

我已经尝试过了:https://wpartisan.me/tutorials/wordpress-database-queries-speed-sql_calc_found_rows,但这并不重要,仍然是相同的加载速度。

这是我的代码:

代码语言:javascript
复制
<?php
GLOBAL $wpdb;
$subcategorii = $wpdb->get_results("select term_id, name, slug from $wpdb->terms where is_mother_cat = '1' ORDER BY term_id DESC");

// total numar de postari de afisat
$per_page = 28;

// extragem numarul total de postari
$total_rows = count($subcategorii);

// setam numarul total de pagini
$pages = ceil($total_rows / $per_page);

// extragem page curenta
$current_page = (@$_GET['page'] ? @$_GET['page'] : 1);
$current_page = ($total_rows > 0) ? min($pages, $current_page) : 1;

// offset
$start = $current_page * $per_page - $per_page;

// salvam in array doar postarile din page curenta
$subcategorii_array = array_slice($subcategorii, $start, $per_page);

foreach ($subcategorii_array as $subcats) {
    echo '<li class="border-radius-5 box-shadow">';
    //z_taxonomy_image($subcats->term_id, 'thumbnail', array('alt' => $subcats->name));
    echo '<a href="'.get_category_link($subcats->term_id).'"><span>'.$subcats->name.'</span></a>';
    echo '</li>';
}

?>
EN

回答 1

Stack Overflow用户

发布于 2020-11-11 06:38:23

修复了我发现的这个函数的问题。但是另一个出现了。现在,在该页面上调用WP_Term_Query->get_Term(),调用所有帖子。至少快了10秒。有人知道这是怎么回事吗?

代码语言:javascript
复制
SELECT t.*, tt.*
FROM wp_terms AS t
INNER JOIN wp_term_taxonomy AS tt
ON t.term_id = tt.term_id
WHERE tt.taxonomy IN ('category')

修复问题的函数:

代码语言:javascript
复制
/* apply this filter only on relevant to you pages */
    function mb_bail_main_wp_query( $sql, WP_Query $wpQuery ) {
        if ( $wpQuery->is_main_query() && is_category(8133) ) {
            /* prevent SELECT FOUND_ROWS() query*/
            $wpQuery->query_vars['no_found_rows'] = true;
    
            /* prevent post term and meta cache update queries */
            $wpQuery->query_vars['cache_results'] = false;
    
            return false;
        }
        return $sql;
    }
    add_action( 'posts_request', 'mb_bail_main_wp_query', 10, 2 );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64774815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档