WP_QUERY多个搜索词

时间:2016-02-21 19:46:44

标签: wordpress

我正在尝试为我的wordpress构建一个更好的脚本,通过分割帖子的标题并搜索标题的每个单词的帖子来显示相关的帖子。

但是当我将WP_QUERY的's arg的值作为一个单词数组传递时。它失败并显示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); 

2 个答案:

答案 0 :(得分:2)

WP_Query接受一串单个关键字,并使用' +'字符。

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

答案 1 :(得分:0)

首先,我认为你应该使用WP_Query而不是query_posts。在他们documentation的query_posts上提到:

  

注意:此功能并非由插件或主题使用。如后面所述,有更好的,更高性能的选项来改变主查询。

假设您切换到WP_Query,搜索参数或' s'值似乎不接受数组。根据{{​​3}},您只能使用字符串。

向此添加数组将导致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查询 请查看文档中显示的示例"使用自定义选择查询显示帖子"。

  3. 应该看起来像

    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);
    

    您应该注意,传递给自定义查询的数据需要手动清理。

    虽然这对我有用,但我不确定它是否是最佳方法。