2012-04-01 13 views
8

Eklenti kodumda, kullanıcı, aynı dizeyi WordPress arama formuna yazmış gibi, belirli bir sorgu dizesiyle eşleşen tüm yayınları döndüren bir WP_Query (veya benzeri) gerçekleştirmek istiyorum. Belki de sadece yoğunlaşıyorum ama bunu yapmanın bir yolunu bulamıyorum. matching gibi WP_Query için özel bir parametreye sahip olmayı beklerdim, ama ben bir kanıt göremiyorum.WordPress'te bir arama sorgusuyla eşleşen yayınları program aracılığıyla nasıl alırsınız?

Dahili olarak nasıl yapıldığını görmek için WordPress kod tabanına girmeye başlıyorum ve bulursam cevabı burada yayınlayacağım. Sadece birinin birisini bilmediğini düşündüm.

cevap

19

itibaren "sorgusu değişkeni Geçme olduğunu s "Bir arama terimi ile WP_Query arama terimi tarafından yazılan sonuçlarına filtre edecek:

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

bu sorgu tarafından oluşturulan karşılık gelen SQL WHERE fıkra şöyle: yukarıda gösterildiği gibi

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

Varsayılan arama joker içerir , büyük olasılıkla aradığınız şeydir. Tam bir arama yapmak isterseniz, "exact" => true sorgu varyantını da geçirebilirsiniz.

Ayrıntılar için WP_Querywp-includes/query.php adresindeki get_posts yöntemine bakın.

+0

sorgu değişkeni geçtikten sonra bize söyleyebilir misiniz I I olarak aranan blogun içeriğine rağmen blogun listesini almak nasıl s aynısını yaptı ama blog listesine rağmen bana mesaj içeriği veriyor – Hetal1311

0

Böyle bir şey mi var?

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

Yoksa bu deneyebilirsiniz: Sana aradığınız inanıyoruz

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

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

bu compare

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

wordpress documentation

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

benim eklenti bu kullanın:

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

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

post_type tabi özel mesaj türleri ile çalışmak için gidiyoruz. suppress_filters, analiz etmeniz gerektiğinde içeriğin biçimlendirilmesini engeller. posts_per_page, sayfa başına varsayılan değil, tüm yayınları döndürecektir.

-1

Bu arama yapmak için daha basit ve daha kolay bir yoludur:

$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); 
İlgili konular