如何以编程方式获取与WordPress中的搜索查询匹配的帖子?

时间:2012-04-01 01:28:16

标签: php wordpress

在我的插件代码中,我想执行WP_Query(或类似),它返回与给定查询字符串匹配的所有帖子,就像用户在WordPress搜索表单中键入相同的字符串一样。也许我只是在密集,但我似乎无法找到办法。我希望WP_Query有一个特殊参数,例如matching,但我看不到任何证据。

我将开始浏览WordPress代码库,看看它是如何在内部完成的,如果我找到它,我会在这里发布答案。我只是觉得有人可能碰巧知道了。

5 个答案:

答案 0 :(得分:23)

将带有搜索字词的查询变量“s”传递给WP_Query将按搜索字词过滤发布结果:

$query_args = array( 's' => 'disquiet' );
$query = new WP_Query( $query_args );

此查询生成的相应SQL WHERE子句如下所示:

AND (((wp_posts.post_title LIKE '%disquiet%') OR (wp_posts.post_content LIKE '%disquiet%')))

默认搜索包含如上所示的通配符,这很可能是您正在寻找的。如果您想要精确搜索,还可以传递"exact" => true的查询变量。

有关详细信息,请参阅wp-includes/query.phpget_posts的{​​{1}}方法。

答案 1 :(得分:1)

我在我的插件中使用它:

$query = new WP_Query(array(
    'post_type' => 'any',
    'suppress_filters' => TRUE,
    'posts_per_page' => '-1'
));

foreach ($query->posts as $post) {
    // ...
}
如果您要使用自定义帖子类型,则需要

post_type。如果您需要对内容进行分析,suppress_filters会阻止格式化内容。 posts_per_page将返回所有帖子,而不是每页的默认值。

答案 2 :(得分:0)

这样的东西?

// Check the query variable is available
if(!$wp_query) global $wp_query; // If not, global it so it can be read from

// Your custom args
$args = array( 'the_title' => $search_term );

// Merge the custom args with any for the query already
$args = array_merge( $args , $wp_query->query );

// Now do the query
query_posts( $args );

或者你可以试试这个:

$query = array (
    'the_title' => $search_term
);

$queryObject = new WP_Query($query);
// The Loop...

答案 3 :(得分:0)

我相信你看的是compare

$args = array(
    'post_type' => 'product',
    'meta_query' => array(
        array(
            'key' => 'color',
            'value' => 'blue',
            'compare' => 'LIKE'
        )
    )
 );

来自wordpress documentation

compare (string) - Operator to test. Possible values are '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN'. Default value is '='.

答案 4 :(得分:0)

这是一种更简单,更简单的搜索方式:

$query = "
        SELECT      *
        FROM        $wpdb->posts
        WHERE       $wpdb->posts.post_title LIKE '$param2%'
        AND         $wpdb->posts.post_type = 'wp_exposants'
        ORDER BY    $wpdb->posts.post_title ";
 $wpdb->get_results($query);