WooCommerce, поиск по wordpress, фильтр pre_get_posts исключают выдержку и описание продукта - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь изменить пользовательский поиск по wordpress с помощью перехвата pre_get_posts, чтобы не было найдено определенных слов в описании продукта.

add_action( 'pre_get_posts', 'exclude_search_content' );
function exclude_search_content( $Q ) {

    $search_phrase = $Q->query['s'];

    if( $Q->is_search() ) {
        /** Dont search for $search_phrase in excerpt and product description
        * search only product title, a meta key and a taxonomy.
        */
    }
}

Кажется, все сложнее, чем я ожидал. Есть идеи?

1 Ответ

0 голосов
/ 28 августа 2018

если вы отметите posts_search reference , вы обнаружите, что некоторые из Contribute уже написали похожую функцию, поэтому я просто протестировал ее, и она работает нормально.

function search_by_title_only($search, $wp_query)
{
    global $wpdb;
    if (empty($search)) {
        return $search; // skip processing - no search term in query
    }
    $q = $wp_query->query_vars;
    $n = !empty($q['exact']) ? '' : '%';
    $search =
    $searchand = '';
    foreach ((array) $q['search_terms'] as $term) {
        $term = esc_sql($wpdb->esc_like($term));
        $search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
        $searchand = ' AND ';
    }
    if (!empty($search)) {
        $search = " AND ({$search}) ";
        if (!is_user_logged_in()) {
            $search .= " AND ($wpdb->posts.post_password = '') ";
        }

    }

    return $search;
}
add_filter('posts_search', 'search_by_title_only', 20, 2);
...