2012-04-01 10 views
8

Nel mio codice plug-in vorrei eseguire un WP_Query (o simile) che restituisce tutti i post corrispondenti a una determinata stringa di query, come se l'utente digitasse la stessa stringa nel modulo di ricerca di WordPress. Forse sono solo un po 'dense, ma non riesco a trovare il modo di farlo. Mi aspetterei di avere un parametro speciale per WP_Query, ad esempio matching, ma non vedo alcuna prova di uno.Come recuperare a livello di programmazione i post che corrispondono a una query di ricerca in WordPress?

Inizierò a passare attraverso la base di codice WordPress per vedere come è fatto internamente, e posterò la risposta qui se la trovo. Ho solo pensato che qualcuno potrebbe capitare di conoscerlo.

risposta

19

Passaggio di una variabile query " S "Per WP_Query con un termine di ricerca sarà filtrare i risultati post di ricerca:

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

La clausola corrispondente SQL WHERE generato da questa query è simile al seguente:

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

di ricerca predefinito include i caratteri jolly come indicato sopra , che è molto probabilmente quello che stai cercando. Se si desidera una ricerca esatta, è anche possibile passare una query var di "exact" => true.

Per i dettagli, vedere il metododi WP_Query in wp-includes/query.php.

+0

Può dirci dopo aver superato variabile query per s come posso ottenere l'elenco dei blog, nonostante il contenuto del blog cercato come di I ha fatto lo stesso ma mi dà il contenuto di post nonostante la lista del blog – Hetal1311

0

Qualcosa di simile?

// 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); 

Oppure si potrebbe provare questo:

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

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

Credo che si sta cercando è questo compare

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

da wordpress documentation

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

Io uso questo nel mio plugin:

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

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

post_type è necessario se si sta andando a lavorare con i tipi di messaggi personalizzati. suppress_filters impedirà la formattazione del contenuto se è necessario analizzarlo. posts_per_page restituirà tutti i post, non il valore predefinito per pagina.

-1

questo è un modo più semplice e più facile da fare ricerca:

$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); 
Problemi correlati