Saltar al contenido

Wordpress – WP_Query con “post_title LIKE ‘algo%'”?

Recabamos por diferentes foros y así traerte la solución para tu dilema, en caso de dificultades puedes dejar tu pregunta y te contestamos porque estamos para servirte.

Solución:

Resolvería esto con un filtro en WP_Query. Uno que detecta una variable de consulta adicional y la usa como prefix del titulo

add_filter( 'posts_where', 'wpse18703_posts_where', 10, 2 );
function wpse18703_posts_where( $where, &$wp_query )

    global $wpdb;
    if ( $wpse18703_title = $wp_query->get( 'wpse18703_title' ) ) 
        $where .= ' AND ' . $wpdb->posts . '.post_title LIKE '' . esc_sql( $wpdb->esc_like( $wpse18703_title ) ) . '%'';
    
    return $where;

De esta manera todavía puedes llamar WP_Querysimplemente pasas el título como el wpse18703_title argumento (o cambie el nombre a algo más corto).

Simplificado:

function title_filter( $where, &$wp_query )

    global $wpdb;
    // 2. pull the custom query in here:
    if ( $search_term = $wp_query->get( 'search_prod_title' ) ) 
        $where .= ' AND ' . $wpdb->posts . '.post_title LIKE '%' . esc_sql( like_escape( $search_term ) ) . '%'';
    
    return $where;


$args = array(
    'post_type' => 'product',
    'posts_per_page' => $page_size,
    'paged' => $page,
    // 1. define a custom query var here to pass your term through:
    'search_prod_title' => $search_term,
    'post_status' => 'publish',
    'orderby'     => 'title', 
    'order'       => 'ASC'
);

add_filter( 'posts_where', 'title_filter', 10, 2 );
$wp_query = new WP_Query($args);
remove_filter( 'posts_where', 'title_filter', 10 );
return $wp_query;

Quería actualizar este código en el que trabajaron para wordpress 4.0 y superior, ya que esc_sql() está obsoleto en 4.0 superior.

function title_filter($where, &$wp_query)
    global $wpdb;

    if($search_term = $wp_query->get( 'search_prod_title' ))
        /*using the esc_like() in here instead of other esc_sql()*/
        $search_term = $wpdb->esc_like($search_term);
        $search_term = ' '%' . $search_term . '%'';
        $where .= ' AND ' . $wpdb->posts . '.post_title LIKE '.$search_term;
    

    return $where;

El resto de las cosas es igual.

También quiero señalar que puedes usar s variable dentro de los argumentos de WP_Query para pasar los términos de búsqueda, que también buscarán el título de la publicación, creo.

Como esto:

$args = array(
    'post_type' => 'post',
    's' => $search_term,
    'post_status' => 'publish',
    'orderby'     => 'title', 
    'order'       => 'ASC'        
);
$wp_query = new WP_Query($args);

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *