问题描述
我创建了一个具有自定义分类法的自定义帖子类型。我有大约 1500 个帖子,所有这些都被分配到某种分类术语中,有些被分配到 200 多个术语。
我注意到,从仪表板,查看自定义帖子类型需要非常长的时间,大部分时间会导致 504 网关 Time-Out 。
从 front-end 查询这些帖子很好,我没有问题。
据我了解,当仪表板正在尝试查看这些自定义帖子类型时,它会尝试将所有分配给每个帖子的信息显示出来。
我有这个 WP 安装集,以便能够使用尽可能多的内存 (memory_limit = -1),正如我在研究,有人说可能是内存相关的。
有什么我可以做的来增加这个查询的性能吗?可能不会加载一个帖子的所有分类术语关系,直到你编辑这个帖子?
将 WP_MEMORY_LIMIT
从 1Gb 增加到 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
最佳解决方案
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 社区的一部分,提供了代码 – 也许它可以帮助别人,或者别人可以扩展它,使其更有效率。 **
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。