2015-12-18 18 views
7

Używam wyszukiwania this code do wyszukiwania produktów ze strony internetowej Wordpress/WooCommerce.
Moje żądanie jest następujące: "http://localhost/wp/?s=D34&post_type=product" Podczas gdy s=D34 jest łańcuchem wyszukiwania.Błąd podczas wyszukiwania określonej kolumny post_type post_type przy użyciu wyszukiwania produktu WooCommerce

Gdy użytkownik wyszuka ciąg znaków. Dane będą wyszukiwane z wszystkich domyślnych pól + produktu custom filed. Poniższa praca kod porządku z http://localhost/wp/?s=D34 ale kiedy jest łączony z url to powiedzieć enter image description here

kod znajduje się poniżej

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

Ma to zapobiec odrębne wartości

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

return $where; 

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

Więc Jakie modyfikacje są wymagane?

URLhttp://localhost/wp/?orderby=price&post_type=product praca grzywny

ale to, co jest nie tak z http://localhost/wp/?s=D34&post_type=product

+0

Jestem po prostu ciekawy (skoro to mi się przydarzyło); spróbuj dodać widżet koszyka lub dowolny z woocommerce widżetów (takich jak kategorie) gdzieś (tymczasowo) na twojej stronie, gdzie znajduje się twoje pole wyszukiwania, a następnie spróbuj wyszukiwania z drugim ciągiem znaków (z 's = d34'). Chciałem przeprowadzić szczegółowe wyszukiwanie woocommerce i działało to tylko wtedy, gdy miałem inne widżety woocommerce obecne na stronie z polem wyszukiwania. Może to być problem woocommerce ... –

+0

Mogę zasugerować tylko tutaj, spróbuj użyć podanego adresu URL, może to być twój problem związany z kodowaniem url znaków D34, http: // localhost/wp /? Post_type = product & s = D34, to może dać wgląd w twój problem przez drukowanie, gdzie klauzula jak poniżej sugeruje, sugeruje – Abhishek

+0

@dingo_d Myślę też, że jej problem z woo-commerce, lub może być, gdy post_type = "produkt" zawarty zaczyna wyszukiwanie w określonym folderze, jak widać na obrazku "Strona główna/Shop/", dobrze spróbuję z tym co zasugerowałeś. –

Odpowiedz

4

spróbować

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

podstawie zaktualizowanego pytanie.

jeśli tylko użyłeś print_r ($where); sprawdzić jaką wartość ma $where zawiera, widać coś w rodzaju tych ...

z 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') 

z 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') 

zanotuj wp1_posts.post_type i uzyskaj podpowiedź. bądź elastyczny wobec siebie i spróbuj debugować. powyżej są wyniki bez $where .= " AND ($wpdb->posts.post_type = 'product') "; jednak.

+0

Zmieniłem pytanie, teraz jest bardziej jasne, proszę spojrzeć teraz.Głosuję w górę, zaakceptuję, jeśli zmodyfikujesz odpowiedź –

+0

to powinno działać ... jeśli nie, to jest to kolejny problem .. którego nie można zobaczyć na bieżącym zadanym pytaniu ... spróbuj dezaktywować wtyczki ... lub spróbuj zmienić motywy .. – Reigel

+0

nie ma aktywnej wtyczki, ale tylko woocommerce. –

Powiązane problemy