Avec une solution vulnérable publiée ici, je viens avec une version un peu simplifiée et assainie.
Tout d'abord, nous créons une fonction pour le posts_where
filtre qui vous permet d'afficher uniquement les publications correspondant à des conditions spécifiques:
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;
}
Maintenant, nous ajoutons cc_search_post_title
dans nos arguments de requête:
$args = array(
'cc_search_post_title' => $search_term, // search post title only
'post_status' => 'publish',
);
Et enfin, enroulez le filtre autour de la requête:
add_filter( 'posts_where', 'cc_post_title_filter', 10, 2 );
$query = new WP_Query($args);
remove_filter( 'posts_where', 'cc_post_title_filter', 10 );
Utiliser get_posts ()
Certaines fonctions qui récupèrent des publications n'utilisent pas de filtres. Par conséquent, les fonctions de filtre posts_where que vous attachez ne modifieront pas la requête. Si vous envisagez d’ get_posts()
interroger vos publications, vous devez définir la valeur suppress_filters
false dans votre tableau d’arguments:
$args = array(
'cc_search_post_title' => $search_term,
'suppress_filters' => FALSE,
'post_status' => 'publish',
);
Maintenant vous pouvez utiliser 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 );
Qu'en est-il du s
paramètre?
Le s
paramètre est disponible:
$args = array(
's' => $search_term,
);
Lors de l'ajout de votre terme de recherche dans les s
paramètres de travail, le titre de la recherche sera également recherché , mais également le contenu de la publication.
Qu'en est-il du title
paramètre ajouté avec WP 4.4?
Passer un terme de recherche dans le title
paramètre:
$args = array(
'title' => $search_term,
);
Est sensible à la casse et LIKE
non %LIKE%
. Cette recherche moyenne hello
ne renverra pas de message avec le titre Hello World
ou Hello
.
$wpdb->prepare()
.