Con alcune soluzioni vulnerabili pubblicate qui, vengo con una versione un po 'semplificata e igienizzata.
Innanzitutto, creiamo una funzione per il posts_where
filtro che ti consente di mostrare solo i post che soddisfano condizioni specifiche:
function cc_post_title_filter($where, &$wp_query) {
global $wpdb;
if ( $search_term = $wp_query->get( 'cc_search_post_title' ) ) {
$where .= ' AND ' . $wpdb->posts . '.post_title LIKE \'%' . $wpdb->esc_like( $search_term ) . '%\'';
}
return $where;
}
Ora aggiungiamo cc_search_post_title
nei nostri argomenti di query:
$args = array(
'cc_search_post_title' => $search_term, // search post title only
'post_status' => 'publish',
);
E infine avvolgi il filtro attorno alla query:
add_filter( 'posts_where', 'cc_post_title_filter', 10, 2 );
$query = new WP_Query($args);
remove_filter( 'posts_where', 'cc_post_title_filter', 10 );
Utilizzo di get_posts ()
Alcune funzioni che recuperano i post non eseguono filtri, quindi le funzioni del filtro posts_where che allevi non modificheranno la query. Se prevedi di utilizzare get_posts()
per eseguire query sui tuoi post, devi impostare suppress_filters
su false nell'array degli argomenti:
$args = array(
'cc_search_post_title' => $search_term,
'suppress_filters' => FALSE,
'post_status' => 'publish',
);
Ora puoi usare get_posts()
:
add_filter( 'posts_where', 'cc_post_title_filter', 10, 2 );
$posts = get_posts($args);
remove_filter( 'posts_where', 'cc_post_title_filter', 10 );
E il s
parametro?
Il s
parametro è disponibile:
$args = array(
's' => $search_term,
);
Mentre aggiungi il termine di ricerca nel s
parametro di lavoro e cercherà il titolo del post, cercherà anche il contenuto del post.
Che dire del title
parametro che è stato aggiunto con WP 4.4?
Passando un termine di ricerca nel title
parametro:
$args = array(
'title' => $search_term,
);
Fa distinzione tra maiuscole e minuscole e LIKE
no %LIKE%
. Ciò significa che la ricerca di hello
non restituirà il post con titolo Hello World
o Hello
.
$wpdb->prepare()
.