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_Query
simplemente 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);