viernes, 16 de marzo de 2012

Limitar búsquedas solo a los títulos

Limitar búsquedas solo a los títulos:

En ocasiones el buscador interno de WordPress se hace demasiado poco útil, y no es que lo haga mal, pero no es todo lo específico que podría ser, en según que momentos.
Una posible necesidad, si te ha surgido, sería que el buscador interno de WordPress solo realice búsquedas en los títulos, que es de lo que normalmente se acuerda el usuario tipo.

Si es tu caso puedes modificar el comportamiento por defecto del buscador interno de WordPress. Solo hay que añadir este código a tu plugin de funciones o al archivo functions.php de tu tema activo:
//Buscar solo en títulos
function __search_by_title_only( $search, &$wp_query )
  {
      if ( empty($search) )
      return $search; // deja de procesar si no hay término alguno en la query
      $q =& $wp_query->query_vars;

      // wp-includes/query.php line 2180 (en version 3.3)
      $n = !empty($q['exact']) ? '' : '%';
      $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 ';
  }
  $term = esc_sql( like_escape( $q['s'] ) );
  if ( empty($q['sentence']) && count($q['search_terms']) > 1 && $q['search_terms'][0] != $q['s'] )
  $search .= " OR ($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
  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', 10, 2 );
Guardas los cambios y ya lo tienes. Ahora solo hará las búsquedas en los títulos de tus entradas.

No hay comentarios:

Publicar un comentario