2016-02-21 40 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", 
);