2016-02-21 107 views
0

我試圖建立我的WordPress,將通過分割後的標題顯示相關的帖子和​​搜索信息爲題的每一個字一個更好的劇本。WP_QUERY多個搜索字詞

但是當我將WP_QUERY的參數的'的值作爲單詞數組傳遞時。它失敗並顯示wordpress的所有帖子

我被卡住了。任何解決方案通過多個的'值。在此先感謝..

$search = $_GET['search']; 
$search_terms = preg_split("/[^\w]*([\s]+[^\w]*|$)/", $search, -1, PREG_SPLIT_NO_EMPTY); 

      $p_args = array(
       "post_type" => "post", 
       "paged" => $paged, 
       "s" => $search_terms, 
       ); 

query_posts($p_args); 

回答

0

首先,我認爲你應該使用WP_Query而不是query_posts。在它們的documentation的query_posts中提到:

注意:該函數不適用於插件或主題。正如後面所解釋的,改變主查詢有更好,更高性能的選項。

假設您切換到WP_Query,搜索參數或's'值似乎不接受數組。根據documentation你只能使用一個字符串。

向此添加數組將導致WP_Query忽略該數組。

的方法,我跟着一個項目最近是:

  1. 見WP_Query 做出實際的SQL查詢爲此,您可以通過

     
    
    // Your sample query 
    $query = new WP_Query(array('cat' => 4)); 
    // Print the SQL query 
    echo $query->request; 
     
    
  2. 創建基於自定義SQL查詢上面的一個 查看「使用自定義選擇查詢顯示帖子」文檔中顯示的示例。

它應該看起來像

global $wpdb; 
global $post; 
$querystr = " 
    SELECT DISTINCT wposts.* 
    FROM $wpdb->posts wposts 
     LEFT JOIN $wpdb->postmeta wpostmeta ON wposts.ID = wpostmeta.post_id 
     LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id) 
     LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) 
    WHERE wpostmeta.meta_key = 'customDateField' 
     AND wpostmeta.meta_value >= CURDATE() 
     AND $wpdb->term_taxonomy.taxonomy = 'category' 
     AND $wpdb->term_taxonomy.term_id IN(1,2) 
    ORDER BY wpostmeta.meta_value ASC 
LIMIT 4 
"; 
$wpdb->get_results($querystr, OBJECT); 

你應該注意到,傳遞給自定義查詢數據時,需要手動消毒。

即使這對我有效,我不知道這是否是最好的方法。

0

WP_Query接受一串以'+'字符連接的單個關鍵字。

$p_args = array(
    "post_type" => "post", 
    "paged" => $paged, 
    "s" => "dogs+cats", 
);