我正在使用get_posts来获取与搜索关键字匹配的帖子列表,问题是我get_postss parameter默认情况下不会搜索标签,如果在标题中找到了关键字,而在标签。

我的搜索条件是:

  • 如果标题
  • 中存在关键字,则返回帖子
  • 如果内容
  • 中存在关键字,则返回帖子
  • 如果关键字是与帖子关联的标签,则返回帖子。

  • 任何想法都太棒了。我尝试了“搜索所有内容”插件,但似乎只能在WordPress的默认搜索功能上使用。

    下面的代码是我尝试过的简化版本,但这并不满足所有3个条件。
    <?php
    
    /* Set global query parameters */
    $image_args = array(
        'posts_per_page' => (isset($_GET['show_all']) && $_GET['show_all'] == 'true')? 100000 : 20,
        'post_type' => 'attachment',
        'post_mime_type' => array('image/jpeg', 'image/png'),
        'meta_key' => 'language',
        'meta_value' => "(^".$languages."$|\"".$languages."\"\;)",
        'meta_compare' => 'REGEXP',
        'tax_query' => array(
            'relation' => 'AND',
            array(
                'taxonomy' => 'media_category',
                'field' => 'term_id',
                'terms' => array($gallery_filter, $hotel->term_id),
                'operator' => 'AND',
            ),
        ),
    );
    
    /* If page numbert given, add offet */
    if(!empty($page_no))
        $images_args['offset'] = 20*((int)$page_no-1);
    
    
    /* If search term submitted, add it to the s parameter */
    if(isset($_GET['search'])){
        $image_args['tag_slug__in' = explode(" ", $_GET['search']);
        $image_args['s'] = urldecode($_GET['search_term']);
    }
    

    最佳答案

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

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

    10-07 19:00
    查看更多