2015-12-18 19 views
7

kullanarak /WooCommerce web sitesindeki ürünleri aramak için this code kullanıyorum.
Benim istek URL "http://localhost/wp/?s=D34&post_type=product" olacak iken s=D34 arama dizesi iken.Belirli bir post_type form post_type sütunu aramada hata WooCommerce ürün araması

Kullanıcı bir dizeyi aradığında. Veriler, Tüm varsayılan alanlardan + ürünümüzün custom filed'dan aranacaktır. url ile birleştirilmiş http://localhost/wp/?s=D34 ancak ince aşağıda kod çalışması o zaman enter image description here

Kod

function cf_search_where($where) { 
global $pagenow, $wpdb; 


    if (is_search()) { 
$where = preg_replace("/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/", 
      "(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where); 
     $where .= " AND ($wpdb->posts.post_type = 'product') "; 
    } 

    return $where; 
} 
add_filter('posts_where', 'cf_search_where'); 

Bu farklı değerleri

function cf_search_distinct($where) { 
     global $wpdb; 
if (is_search()) { 
    return "DISTINCT"; //to prevent duplicates 
} 

return $where; 

} 
add_filter('posts_distinct', 'cf_search_distinct'); 

önlemektir aşağıda verilmiştir demek Peki ne tür bir değişiklik gerekli?

URLhttp://localhost/wp/?orderby=price&post_type=product eser ince

ama ne http://localhost/wp/?s=D34&post_type=product

+0

Sadece merak ediyorum (çünkü bu benim başıma geldi); Sayfanızda arama alanınızın bulunduğu geçici bir yere bir widget veya herhangi bir woocommerce widget'ını (kategoriler gibi) eklemeyi ve sonra ikinci dizenizi ('s = d34' ile) aramayı deneyin. Ben woocommerce için ayrıntılı bir arama yapmak istedim ve sadece arama alanı ile sayfada mevcut bazı woocommerce widget'ları vardı çalıştı. Bu bir woocommerce sorunu olabilir ... –

+0

Sadece burada önerebilir, verilen URL'yi kullanmayı deneyebilirsiniz, sorunlarınız, URL kodları ile ilgili olabilir D34, http: // localhost/wp /? Post_type = product & s = D34, Aşağıdaki soruya cevabını yazarak sorunun cevabını verebilir – Abhishek

+0

@dingo_d Ben de woo-ticaret meselesini düşünüyorum, ya da post_type = 'ürün' eklendiğinde, resimdeki gibi görebileceğiniz gibi belirli bir klasörde aramaya başladığında olabilir./Shop/", önerdiğin şeyi deneyeceğim. –

cevap

4

derdin bu güncellenmiş soru üzerine

function cf_search_where($where) { 
    global $pagenow, $wpdb; 

    // a little debugging will help you.. 
    //print_r ($where); 
    //die(); 

    if (is_search()) { 

     $where = preg_replace("/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/", 
      "(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where); 
     $where .= " AND ($wpdb->posts.post_type = 'product') "; 
    } 

    return $where; 
} 
add_filter('posts_where', 'cf_search_where'); 

Tabanlı deneyin. Eğer değer $where içermeyen kontrol etmek print_r ($where); kullandım sadece

, sen http://localhost/wp/?s=D34&post_type=product

AND (((wp1_posts.post_title LIKE '%D34%') OR (wp1_postmeta.meta_value LIKE '%D34%') OR (wp1_posts.post_content LIKE '%D34%'))) 
AND (wp1_posts.post_password = '') 
AND ((wp1_postmeta.meta_key = '_visibility' AND CAST(wp1_postmeta.meta_value AS CHAR) IN ('visible','search'))) 
AND wp1_posts.post_type = 'product' 
AND (wp1_posts.post_status = 'publish') 

bu gibi bir şey ...

ile http://localhost/wp/?s=D34

AND (((wp1_posts.post_title LIKE '%D34%') OR (wp1_postmeta.meta_value LIKE '%D34%') OR (wp1_posts.post_content LIKE '%D34%'))) 
AND (wp1_posts.post_password = '') 
AND wp1_posts.post_type IN ('post', 'page', 'attachment', 'product') 
AND (wp1_posts.post_status = 'publish') 

göreceksiniz wp1_posts.post_type'u not edin ve bir ipucu alın. Kendinize esnek olun ve hata ayıklamaya çalışın. yukarıda $where .= " AND ($wpdb->posts.post_type = 'product') "; olmadan sonuçları vardır.

+0

Soruyu değiştirdim, şimdi daha net, lütfen şimdi bir göz atın.Oy verirsem, –

+0

cevabını değiştirirsen kabul eder ... eğer işe yaramazsa başka bir problem değilse .. geçerli soruda görülemez ... eklentileri devre dışı bırakmayı dene ... veya temaları değiştirmeyi deneyin .. – Reigel

+0

aktif eklenti yok ama sadece woocommerce. –