簡體   English   中英

WordPress-按分類搜索帖子

[英]WordPress - Search posts by Taxonomy

我的自定義WP搜索查詢

$args = array(
        'post_type' => 'post',
        'taxonomy'  => 'location',
        'field' => 'name',
        'posts_per_page' => 10,
        'term' => $keyword,
    );
$wp_query = new WP_Query($args);

我有2個帖子,位置是倫敦和倫敦的牛津。現在,當我搜索倫敦時,它僅顯示1個帖子**(第一個)**。同樣,當我搜索牛津時,它也沒有找到結果。

當我搜索牛津倫敦時,它的工作正常。

Befor WP_Query Run編寫此代碼

function advance_search_where($where){
    global $wpdb;
    if (is_search())
        $where .= "OR (t.name LIKE '%".get_search_query()."%' AND {$wpdb->posts}.post_status = 'publish')";
    return $where;
}

function advance_search_join($join){
    global $wpdb;
    if (is_search())
        $join .= "LEFT JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id";
    return $join;
}

function advance_search_groupby($groupby){
    global $wpdb;

    // we need to group on post ID
    $groupby_id = "{$wpdb->posts}.ID";
    if(!is_search() || strpos($groupby, $groupby_id) !== false) return $groupby;

    // groupby was empty, use ours
    if(!strlen(trim($groupby))) return $groupby_id;

    // wasn't empty, append ours
    return $groupby.", ".$groupby_id;
}

add_filter('posts_where','advance_search_where');
add_filter('posts_join', 'advance_search_join');
add_filter('posts_groupby', 'advance_search_groupby');

現在像這樣運行您的WP_Query

$args = array(
        'post_type' => 'post',
        'posts_per_page' => 10,
        's' => $keyword,
    );
$wp_query = new WP_Query($args);

在獲得所有結果之后,如果您不刪除該結果,則只需要刪除上面的過濾器coz即可,它將應用於該頁面的其他wp_query中。

remove_filter('posts_where','advance_search_where');
remove_filter('posts_join', 'advance_search_join');
remove_filter('posts_groupby', 'advance_search_groupby');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM