1

My WooCommerce site uses the default WP search. The one thing that I need to change is to exclude the post body from the search (in my case, the product description).

Right now, the search searches title, body, taxonomy terms. I want it to search only title and taxonomy terms.

To clarify, I don't want to simply exclude the product description from displaying on the search resultspage. I want to stop the search engine from looking in the product description. ie: Search engine should only look for matches in the product name and taxonomy terms.

I searched high and low and can't find info how to do this. Any suggestions?

Thanks!

  • Edit your search template – ngearing Dec 14 '16 at 22:20
  • How would that help?? The search template page simply displays the search results. I want different search results. For example, I may have only 3 products with "American" in the product name, but 15 with "American" in the product description. When someone searches for "American", I only want the 3 products to come up. Seems to me that I need to hook into the search function, not customize the search template. – nstampler Dec 15 '16 at 12:01
  • Thats not what you said in your question. "The one thing that I need to change is to exclude the post body". The Search template determines what is displayed. So you can hide or show any parts of a post by editing the template. If that is not what you want to do please update your question to be more accurate. – ngearing Dec 15 '16 at 22:19
  • 2
    Possible duplicate of how to limit search to post titles? – Tunji Dec 19 '16 at 10:39
1

To remove elements from being searched, use the post_search filter to amend the SQL query for the search e.g. only pull in the title.

function ni_search_by_title_only( $search, &$wp_query ){
 global $wpdb;
 if ( empty( $search ) )
  return $search;
 $q = $wp_query->query_vars;
 $n = ! empty( $q['exact'] ) ? '' : '%';
 $search =
 $searchand = '';
 foreach ( (array) $q['search_terms'] as $term ) {
  $term = esc_sql( like_escape( $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', 'ni_search_by_title_only', 500, 2 );

Taken from https://nathaningram.com/restricting-wordpress-search-to-titles-only/

Personally I prefer a plugin for this as it gives me full control over every field I want in my search, the one I use is relevanssi. It should do what you want really easily.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.