問題描述

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