如果关键字存在于标题,内容或标记中,则Wordpress get_posts

时间:2015-07-24 14:34:55

标签: wordpress search tags keyword

我使用get_posts获取与搜索关键字匹配的帖子列表,问题是我get_posts的{​​{1}} parameter默认情况下不会搜索代码并使用如果在标题中找到关键字而不在标记中,则s将无效。

我的搜索条件是:

  1. 如果标题
  2. 中存在关键字,则返回帖子
  3. 如果内容
  4. 中存在关键字,则返回帖子
  5. 如果关键字是与帖子关联的标记,则返回帖子。
  6. 任何想法都会很棒。我尝试了“搜索所有内容”插件,但这似乎只适用于WordPress的默认搜索功能。

    下面的代码是我尝试过的简化版本,但这不符合所有3个标准。

    tag_slug__in

3 个答案:

答案 0 :(得分:1)

您可以使用自己的查询。下面是一个例子

$querystr="
    SELECT *
        FROM $wpdb->posts, $wpdb->term_relationships, $wpdb->term_taxonomy, $wpdb->terms
            WHERE ($wpdb->terms.name = '$s'
            OR $wpdb->posts.post_content LIKE '%$s%'
        OR $wpdb->posts.post_title LIKE '%$s%')
        AND $wpdb->posts.ID = $wpdb->term_relationships.object_id
        AND $wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id
        AND $wpdb->term_taxonomy.term_id = $wpdb->terms.term_id
        ORDER BY $wpdb->posts.post_date DESC
";

$pageposts = $wpdb->get_results($querystr, OBJECT_K);

foreach ($pageposts as $post): setup_postdata($post);
    echo the_title() . '<br /><br />';
endforeach;

答案 1 :(得分:1)

我使用wpdb查询来获取结果。加入帖子和分类表,然后通过$search_title获得不同的结果。希望这会奏效。 :)

global $wpdb;
$querystr= "SELECT DISTINCT $wpdb->posts.* FROM $wpdb->posts
                LEFT JOIN $wpdb->term_relationships
                    ON ( $wpdb->posts.ID = $wpdb->term_relationships.object_id )
                LEFT JOIN $wpdb->term_taxonomy
                    ON ( $wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id )
                LEFT JOIN $wpdb->terms
                    ON ( $wpdb->term_taxonomy.term_id = $wpdb->terms.term_id ) 

                WHERE ( $wpdb->terms.name LIKE '%$search_title%'
                    OR $wpdb->posts.post_content LIKE '%$search_title%'
                    OR $wpdb->posts.post_title LIKE '%$search_title%' )
                    AND $wpdb->posts.post_status = 'publish'
                    AND $wpdb->posts.post_type = 'product' 
                    ORDER BY $wpdb->posts.post_title ASC";

$query_object = $wpdb->get_results($querystr);

答案 2 :(得分:0)

查看Wordpress提供的Post Clauses过滤器。它允许您直接将MySQL语句插入WP查询。