Ich habe dem Filterformular für Beiträge ein Textfeld hinzugefügt und verwende den Parameter s=, damit die Suche funktioniert. Aber wie sucht man nur im Titel des Beitrags (nicht im Inhalt)?
HTML:
<input type="text" name="search" placeholder="Search..." value="">
<button>Filter</button>
PHP:
$args = array(
'post_type' => $_POST['posttype'],
'orderby' => $_POST['orderby'],
'order' => $_POST['order'],
's' => $_POST['search']
);
Suchen Sie die Datei, in der Sie die Suchfunktion implementieren müssen, und fügen Sie den folgenden Code zu Ihrer Datei hinzu.
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => $_POST['orderby'],
'order' => $_POST['order'],
'search_prod_title' => $_POST['search'],
);
add_filter( 'posts_where', 'title_filter', 10, 2 );
$query = new WP_Query($args);
remove_filter( 'posts_where', 'title_filter', 10, 2 );
Um den Titel in Ihrer WordPress-Abfrage zu suchen, müssen Sie der Datei functions.php Ihres WordPress-Themes eine Funktion hinzufügen.
Version 3.9
function title_filter( $where, &$wp_query ){
global $wpdb;
if ( $search_term = $wp_query->get( 'search_prod_title' ) ) {
$where .= ' AND ' . $wpdb->posts . '.post_title LIKE \'%' . esc_sql( like_escape( $search_term ) ) . '%\'';
}
return $where;
}
Veraltet 4.0.0 Verwenden Sie wpdb::esc_like()
https://make.wordpress.org/core/2014/06/20/like_escape-is-deprecated-in-wordpress-4-0/
function title_filter( $where, &$wp_query ){
global $wpdb;
if ( $search_term = $wp_query->get( 'search_prod_title' ) ) {
$where .= ' AND ' . $wpdb->posts . '.post_title LIKE \'%' . esc_sql( $wpdb->esc_like( $search_term ) ) . '%\'';
}
return $where;
}