2012-04-01 16 views
8

En mi código de complemento me gustaría realizar un WP_Query (o similar) que devuelve todas las publicaciones que coinciden con una cadena de consulta determinada, como si el usuario escribiera esa misma cadena en el formulario de búsqueda de WordPress. Tal vez solo estoy siendo denso, pero parece que no puedo encontrar la forma de hacerlo. Esperaría tener un parámetro especial para WP_Query, como matching, pero no veo evidencia de uno.¿Cómo recuperar las publicaciones que coinciden con una consulta de búsqueda en WordPress?

Comenzaré a utilizar la base de código de WordPress para ver cómo se hace internamente, y publicaré la respuesta aquí si la encuentro. Solo pensé que alguien podría saber de primera mano.

Respuesta

19

Pasar una variable de consulta de " s "A WP_Query con un término de búsqueda filtrará los resultados de POST por término de búsqueda:

$query_args = array('s' => 'disquiet'); 
$query = new WP_Query($query_args); 

El correspondiente cláusula SQL WHERE generada por esta consulta es el siguiente:

AND (((wp_posts.post_title LIKE '%disquiet%') OR (wp_posts.post_content LIKE '%disquiet%'))) 

de búsqueda predeterminado incluye los comodines como se muestra arriba , lo más probable es lo que estás buscando. Si desea una búsqueda exacta, también puede pasar una consulta var de "exact" => true.

Para los detalles, vea el método get_posts de WP_Query en wp-includes/query.php.

+0

¿Puede usted por favor decirnos después de pasar la variable de consulta que es como puedo obtener la lista de el blog a pesar del contenido del blog buscado a partir del I hice lo mismo pero me da contenido de publicación a pesar de la lista de blog – Hetal1311

0

¿Algo como esto?

// Check the query variable is available 
if(!$wp_query) global $wp_query; // If not, global it so it can be read from 

// Your custom args 
$args = array('the_title' => $search_term); 

// Merge the custom args with any for the query already 
$args = array_merge($args , $wp_query->query); 

// Now do the query 
query_posts($args); 

O usted podría intentar esto:

$query = array (
    'the_title' => $search_term 
); 

$queryObject = new WP_Query($query); 
// The Loop... 
0

Creo que busca es este compare

$args = array(
    'post_type' => 'product', 
    'meta_query' => array(
     array(
      'key' => 'color', 
      'value' => 'blue', 
      'compare' => 'LIKE' 
     ) 
    ) 
); 

de wordpress documentation

compare (string) - Operator to test. Possible values are '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN'. Default value is '='. 
1

yo uso esto en mi plugin: se necesita

$query = new WP_Query(array(
    'post_type' => 'any', 
    'suppress_filters' => TRUE, 
    'posts_per_page' => '-1' 
)); 

foreach ($query->posts as $post) { 
    // ... 
} 

post_type si se va a trabajar con tipos de envíos personalizados. suppress_filters evitará que el contenido se formatee si necesita analizarlo. posts_per_page devolverá todas las publicaciones, no las predeterminadas por página.

-1

Esta es una manera más simple y más fácil de hacer una búsqueda:

$query = " 
     SELECT  * 
     FROM  $wpdb->posts 
     WHERE  $wpdb->posts.post_title LIKE '$param2%' 
     AND   $wpdb->posts.post_type = 'wp_exposants' 
     ORDER BY $wpdb->posts.post_title "; 
$wpdb->get_results($query); 
Cuestiones relacionadas