我的一个网站有一个很大的问题。我有一个类别来存储其他类别。问题是WordPress使用WP_Query->get_posts并获取这个主分类页面上的所有帖子。尽管我删除了里面的所有内容,只留下了the_header和the_footer,但它仍然执行查询。结构类似于此Category>Subcategory>posts。问题是WordPress正在对我的子类别中的所有帖子进行查询。
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,但这并不重要,仍然是相同的加载速度。
这是我的代码:
<?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>';
}
?>发布于 2020-11-11 06:38:23
修复了我发现的这个函数的问题。但是另一个出现了。现在,在该页面上调用WP_Term_Query->get_Term(),调用所有帖子。至少快了10秒。有人知道这是怎么回事吗?
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')修复问题的函数:
/* 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 );https://stackoverflow.com/questions/64774815
复制相似问题