WooCommerce,wordpress搜索,pre_get_posts过滤器排除摘录和产品描述

时间:2018-08-28 11:41:19

标签: wordpress woocommerce custom-wordpress-pages wordpress-hook

我正在尝试使用pre_get_posts钩子修改自定义wordpress搜索,以免在产品说明中搜索特定的单词。

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 :(得分:0)

如果您选中enter image description here,您会发现一些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);