C'è un modo per limitare la ricerca ai post dei titoli? So che posso modificare il file core di query.php ma ci deve essere un modo per farlo con gli hook, giusto?
Grazie in anticipo!
C'è un modo per limitare la ricerca ai post dei titoli? So che posso modificare il file core di query.php ma ci deve essere un modo per farlo con gli hook, giusto?
Grazie in anticipo!
Risposte:
Ecco un filtro che farà il trucco. Rilascialo nel tema functions.php
o in un plug-in.
/**
* Search SQL filter for matching against post title only.
*
* @link http://wordpress.stackexchange.com/a/11826/1685
*
* @param string $search
* @param WP_Query $wp_query
*/
function wpse_11826_search_by_title( $search, $wp_query ) {
if ( ! empty( $search ) && ! empty( $wp_query->query_vars['search_terms'] ) ) {
global $wpdb;
$q = $wp_query->query_vars;
$n = ! empty( $q['exact'] ) ? '' : '%';
$search = array();
foreach ( ( array ) $q['search_terms'] as $term )
$search[] = $wpdb->prepare( "$wpdb->posts.post_title LIKE %s", $n . $wpdb->esc_like( $term ) . $n );
if ( ! is_user_logged_in() )
$search[] = "$wpdb->posts.post_password = ''";
$search = ' AND ' . implode( ' AND ', $search );
}
return $search;
}
add_filter( 'posts_search', 'wpse_11826_search_by_title', 10, 2 );
La maggior parte del codice viene appena copiato dalla WP_Query
classe, ad eccezione di quello post_content LIKE
rimosso.
AGGIORNAMENTO: rimosso obsoleto like_escape()
dalla 4.0