2012-12-31 45 views
4

我想在頁面上運行兩個查詢。 第一個顯示了自定義用戶搜索的結果 ,第二個只是顯示更新的記錄,其中幾個自定義參數被硬編碼到查詢中。wp_reset_query()wordpress - 無法重置最後一個查詢

我遇到的問題是,運行自定義搜索時,兩個查詢都會受到影響,並且結果在兩個位置都會更新。

我試過把這些wp_reset_postdata(); wp_reset_query();到處都是,但都沒有。

有沒有人有任何想法?

這是我第一次查詢

$args = array('post_type' => 'vacancy', 'post_status' => 'publish')); 
add_filter('posts_where', 'posts_where_title', 10, 2); 
function posts_where_title($where, &$wp_query) { 
global $wpdb; 
$where .= ' AND (' . $wpdb->posts . '.post_title LIKE \'%' . esc_sql(like_escape($_POST['post_title'])) . '%\''; 
$where .= ' OR ' . $wpdb->posts . '.post_content LIKE \'%' . esc_sql(like_escape($_POST['post_title'])) . '%\')'; 
return $where; 
} 
$the_query = new WP_Query($args); 
if ($the_query->have_posts()) : while ($the_query->have_posts()) : $the_query->the_post(); 
//display results ?> 
<?php $i++; endwhile; endif; 
wp_reset_postdata(); 
wp_reset_query();?> 

這是我的第二個查詢...

$args = array('post_type' => 'vacancy', 'posts_per_page' => 10); 
query_posts("_vacancy_ends>=".date("Y-m-d")."&_vacancy_starts<=".date("Y-m-d")."&order=DESC"); 
$loop = new WP_Query($args); 
while ($loop->have_posts()) : $loop->the_post(); 
//display results 
endwhile; 
wp_reset_postdata(); 
wp_reset_query(); 
+1

出於好奇,你有什麼_vacancy_ends和_vacancy_start參數呢?這些自定義字段是否屬於空缺職位類型? – maiorano84

回答

4

你的問題是這樣的一行:

query_posts("_vacancy_ends>=".date("Y-m-d")."&_vacancy_starts<=".date("Y-m-d")."&order=DESC"); 

query_posts影響主迴路,以及幾乎每個在給定頁面請求中運行的其他循環。在極少數情況下,將WP_Query或甚至get_posts用於WordPlayer,因爲您正在影響很多全局變量,Wordpress使用它來填充有關正在查看的內容的信息。

就我個人而言,我通常不使用WP_Query上的查詢方法,但也許它可能有助於在這種情況下。試着改變你的第二個查詢是這樣的:

$args = array('post_type' => 'vacancy', 'posts_per_page' => 10); 
$loop = new WP_Query($args); 
$loop->query("_vacancy_ends>=".date("Y-m-d")."&_vacancy_starts<=".date("Y-m-d")."&order=DESC"); 
while ($loop->have_posts()) : $loop->the_post(); 
    //display results 
endwhile; 
wp_reset_postdata(); 
wp_reset_query(); 

這本地化查詢到WP_Query的一個實例,而不是全球影響的一切。這是未經測試的,但讓我知道這是否有幫助。

一件事:

add_filter('posts_where', 'posts_where_title', 10, 2); 
function posts_where_title($where, &$wp_query) { 
    global $wpdb; 
    $where .= ' AND (' . $wpdb->posts . '.post_title LIKE \'%' . esc_sql(like_escape($_POST['post_title'])) . '%\''; 
    $where .= ' OR ' . $wpdb->posts . '.post_content LIKE \'%' . esc_sql(like_escape($_POST['post_title'])) . '%\')'; 
    return $where; 
} 

請記住,這個過濾器會在您的呼叫後的add_filter設置每個查詢運行。您可能要考慮在哪裏多個查詢後,不需要過濾器運行點移除你的過濾器:

remove_filter('posts_where', 'posts_where_title'); 
+1

這是很大的問題解決和解釋是偉大的..新年快樂,很多謝謝 – AttikAttak