問題描述
説我們有兩個 CPT,一個城市,另一個餐館。每個餐廳位於一個城市 (duh),供應不同類型的食物,不同的小時,不同的價格等。每個餐廳都有一個”city” 元字段的城市的帖子 ID,其餘的屬性在其他元領域。
我的目標是能夠做一些像 「在所有城市中有意大利餐廳在週日開放的地方」,城市分頁。
這顯然要在每個國家都有規模,有很多城市和餐館。 (是的,類比實際上是 DB 的比例)
進入我心目中的一種方法是搜索餐館,然後按城市分組,但這聽起來像是可以輕鬆地在一個微不足道的搜索 (所有在星期一開放的餐廳) 溢出 memory 的東西。
基本上我正在尋找的是一種方式來加入兩個查詢,但任何其他想法都是值得歡迎的
最佳解決方案
這些元查詢將會變得昂貴,並且找出答案並緩存它是一個很差的解決方案,那麼為什麼不去問題的根源並調整數據結構?
您的核心數據類型是餐廳,您想要過濾/查詢,以便分類,所以為什麼沒有位置/城市分類?只是因為你有一個城市郵政類型並不意味着你也不能添加一個城市或區域分類。通過 continent -> country -> province -> city 分層結構。
現在您的搜索是用 tax_query 的餐廳搜索,指定城市。在省/國家的每一個孩子任期做這個,你有你想要的。
除此之外,這仍然不能避免元查詢,這是您將面臨的第一個性能問題。您目前存儲的任何您將要讓用户過濾或搜索的後期元數據需要分類,或具有同等價值。例如。對於價格,您可能會制定 「每人€10-20」 的範圍,然後讓用户搜索,而不是輸入一個精確的值。
所以最終的結果會給你:
-
一個頁面,當在位置分類法中給出一個術語時,抓住最深的孩子術語,然後循環遍歷它們
-
對於這些孩子的每個術語
-
對於符合其他搜索參數的餐廳的查詢,由於性能原因,最多可以有 4 或 5 家餐館
-
如果有人找到
-
顯示術語/城市的標題
-
顯示搜索結果和指向完整結果頁的鏈接
-
-
我也建議以下事情:
-
使用
pre_get_posts,這將給您免費分頁,只需將搜索 UI 放在模板的頂部,如果您可以使用分類歸檔,以便城市/位置分類法更好! -
分類法分類法分類法,不要使用後期元查詢。如果你做這個頁面的可擴展性和性能將會急劇下降。單個元查詢可以降低網站流量,如果您正在為每個城市做一個,那麼這個頁面將需要很長時間才能加載
最後,考慮這個只是因為你可以查詢這個,並不意味着你應該。對於快速頁面加載的高效數據結構,您需要確定什麼約束是可以接受的。您的數據越多,您的查詢將越貴,或者需要複製和逼近的數據越多。在某些時候,如果您想要查詢任何內容,您將需要彈性搜索以達到平庸的表現。
使 UX 決定更改用户可以幫助您的方式進行搜索,但不要拒絕用户他們想要什麼。例如。讓用户選擇預定義的價格範圍或範圍,而不是給他們一個接受任何數字的條目框 (滑塊可以捕捉到最接近的€5,將一個價格較高的元查詢轉換成更快的分類法查詢提及多個條款)
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。