Avigo
Agregué un campo de texto al formulario de filtro de publicaciones y uso el parámetro s= para que la búsqueda funcione. Pero, ¿cómo buscar solo en el título de la publicación (no en el contenido)?
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']
);
Tanmay Patel
Localice el archivo en el que necesita implementar la función de búsqueda y agregue el siguiente código a su archivo.
$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 );
Para buscar el título en su consulta de WordPress, debe agregar una función al archivo functions.php de su tema de WordPress.
Versión 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;
}
En desuso 4.0.0 Usar 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;
}
-
@Avigo puedes establecer un código como este prntscr.com/syxfwf y probarlo.
– Tanmay Patel
13 de junio de 2020 a las 8:21
-
¡Gracias Tanmay! hizo el trabajo y me ahorró tiempo de depuración y dolor de cabeza.
– Ruvee
7 de marzo de 2021 a las 3:15
-
¡La función like_escape está obsoleta desde la versión 4.0.0! Use wpdb::esc_like() en su lugar
– fideos
30/09/2022 a las 20:46