Cómo buscar solo en el título de la publicación – wp_query

2 minutos de lectura

Avatar de usuario de Avigo
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']
    );

Avatar de usuario de Tanmay Patel
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

¿Ha sido útil esta solución?