問題描述
我建立了一個具有自定義分類法的自定義帖子型別。我有大約 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。