我创建了一个带有自定义分类法的自定义帖子类型。我有大约1500篇帖子,所有这些帖子都被分配给某种分类术语。。。一些被分配到200多个术语。
我注意到,从仪表板上查看自定义帖子类型需要非常长的时间,大多数时间导致504网关超时。
从前端查询这些帖子很好,我对此没有任何问题。
我的理解是,当仪表板试图查看这些自定义帖子类型时,它试图在显示所有内容之前提取分配给每个帖子的所有信息。
我确实有这个WP安装设置,可以根据需要使用尽可能多的内存(memory\\u limit=-1),正如我所研究的,一些人说它可能与内存有关。
是否有什么可以提高此查询的性能。。。在编辑帖子之前,可能不会加载帖子的所有分类术语关系?
Errors after increasing WP_MEMORY_LIMIT
from 1Gb to 2Gb:
WordPress database error: [MySQL client ran out of memory]
SELECT t.*, tt.*, tr.object_id FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN (\'locations\') AND tr.object_id IN
WordPress database error: [Lost connection to MySQL server during query]
SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN
WordPress database error: [MySQL server has gone away]
SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month FROM wp_posts WHERE post_type = \'services\' ORDER BY post_date DESC
最合适的回答,由SO网友:NW Tech 整理而成
CPT和分类术语是通过插件创建的。我可以通过在插件中添加以下内容来减少查询:
add_action( \'pre_get_posts\', \'nwtd_lpfs_custom_admin_query\' );
function nwtd_lpfs_custom_admin_query( $query ) {
if( !is_admin() && !$query->is_main_query() ) {
return;
}
if( is_post_type_archive( \'services\' ) ) {
$query->set(\'no_found_rows\', 1 );
$query->set(\'update_post_meta_cache\', 0 );
$query->set(\'update_post_term_cache\', 0 );
}
}
到目前为止,我有700多篇文章与1500多个分类术语相关联,一切都很好。这些帖子几乎是即时出现的。
**我没有写这段代码。我直接与之合作的人,不是WordPress Answers社区的一员,提供了代码——也许它可以帮助其他人,或者其他人可以扩展它以提高效率**