問題描述
Possible Duplicate:
When to use WP_query(), query_posts() and pre_get_posts
我剛才注意到,the documentation for query_posts()提到了一些使用 query_posts 改變主循環的”disadvantages”,特別是:「引起額外的 SQL 查詢」 。
這似乎意味着有另一種方式/更好的方式。顯然,有二次循環使用了 get_posts() 和 WP_Query,但是我沒有看到它們是在 Codex 文檔中列出的”disadvantages” 。
我可以看到,等到你進入模板運行 query_posts 之前,WordPress 已經運行了一次查詢,現在是第二個查詢,第一個被忽略 (第一個被基本忽略) 。這絕對沒有效果 (儘管也許並不重要,誰知道?)
我的問題是:是否有替代 query_posts 不添加 「附加 SQL 查詢」 或 Codex 文檔是否只是欺騙?
最佳解決方案
當我加入法典的缺點時,我主要考慮使用’request’ 過濾器作為 query_posts() 的替代品。
該篩選器僅針對主查詢運行,以便解決每個查詢觸發的’pre_get_posts’ 問題。
缺點是您無法訪問像 is_single() 等查詢標誌。
這裏有一種方法可以訪問它們,而不會實際執行 SQL 查詢:
function alter_the_query( $request ) {
$dummy_query = new WP_Query(); // the query isn't run if we don't pass any query vars
$dummy_query->parse_query( $request );
// this is the actual manipulation; do whatever you need here
if ( $dummy_query->is_home() )
$request['category_name'] = 'news';
return $request;
}
add_filter( 'request', 'alter_the_query' );
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。