WP_QUERY多个搜索词

问题描述 投票:0回答:2

我正在尝试为我的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); 
wordpress
2个回答
2
投票

WP_Query接受一串用“+”字符连接的单个关键字。

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

0
投票

首先,我认为你应该使用WP_Query而不是query_posts。在他们的documentation上查询_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);

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

尽管这对我有用,但我不确定它是否是最好的方法。

© www.soinside.com 2019 - 2024. All rights reserved.