Wann der Benutzer nach einer Zeichenfolge sucht. Daten werden aus allen Standardfeldern + Produkten gesucht custom filed. Der folgende Code funktioniert gut mit http://localhost/wp/?s=D34 aber wenn &post_type=product ist mit url verkettet dann heißt es
Code ist unten angegeben
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' );
Dies soll unterschiedliche Werte verhindern
function cf_search_distinct( $where ) {
global $wpdb;
if ( is_search() ) {
return "DISTINCT"; //to prevent duplicates
}
return $where;
}
add_filter( 'posts_distinct', 'cf_search_distinct' );
Ich bin nur neugierig (da mir das irgendwie passiert ist); Versuchen Sie, ein Warenkorb-Widget oder eines der Woocommerce-Widgets (wie Kategorien) irgendwo (vorübergehend) auf Ihrer Seite hinzuzufügen, wo sich Ihr Suchfeld befindet, und versuchen Sie dann, mit Ihrer zweiten Zeichenfolge (mit s=d34). Ich wollte eine detaillierte Suche nach WooCommerce durchführen und es funktionierte nur, als ich einige andere WooCommerce-Widgets auf der Seite mit dem Suchfeld hatte. Es könnte ein Woocommerce-Problem sein …
– dingo_d
2. Januar 2016 um 8:33 Uhr
Ich kann nur hier vorschlagen, versuchen Sie es mit der angegebenen URL, möglicherweise bezieht sich Ihr Problem auf die URL-Codierung der Zeichen D34 , localhost/wp/?post_type=product&s=D34 kann es einen Einblick in Ihr Problem geben, indem Sie die Where-Klausel drucken, wie die folgende Antwort vorschlägt
– Abhishek
4. Januar 2016 um 5:58 Uhr
@dingo_d Ich denke auch, dass es ein Woo-Commerce-Problem ist, oder wenn post_type = ‘product’ enthalten ist, beginnt es mit der Suche in einem bestimmten Ordner, wie Sie auf dem Bild “Home/Shop/” sehen können. Nun, ich werde es mit dem versuchen, was Sie vorgeschlagen haben.
– Adnan Ali
4. Januar 2016 um 12:04 Uhr
@Abhishek Ich habe es schon einmal mit diesem Ding versucht, aber es hat nicht die erforderlichen Ergebnisse geliefert, sondern den gleichen Fehler.
– Adnan Ali
4. Januar 2016 um 12:05 Uhr
Reigel Gallarde
Versuche dies
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' );
Basierend auf Ihrer aktualisierten Frage.
wenn Sie nur verwendet haben print_r ($where); um zu überprüfen, was Wert tut $where enthält, werden Sie so etwas sehen …
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")
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")
nimm zur Kenntnis wp1_posts.post_type und erhalten Sie einen Hinweis. Seien Sie flexibel und versuchen Sie zu debuggen. oben sind Ergebnisse ohne die $where .= " AND ($wpdb->posts.post_type="product") "; obwohl.
Ich habe die Frage geändert, jetzt ist es klarer, bitte schauen Sie jetzt nach. Ich stimme ab, werde akzeptieren, wenn Sie die Antwort ändern
– Adnan Ali
18. Dezember 2015 um 18:50 Uhr
es sollte funktionieren … wenn nicht, dann ist es ein anderes Problem … das in der aktuellen Frage nicht zu sehen ist … versuchen Sie, Plugins zu deaktivieren … oder versuchen Sie, die Themen zu ändern …
– Reigel Gallarde
19. Dezember 2015 um 2:02 Uhr
Es gibt kein aktives Plugin, sondern nur WooCommerce.
– Adnan Ali
19. Dezember 2015 um 12:40 Uhr
Ich habe gerade erfahren, dass das eigentliche Problem die URL ist. Dieser Code ist in Ordnung. Ich habe Abfragen direkt in den Code eingefügt, um sie zu überprüfen. es funktioniert nur gut mit localhost/wp/?s=D34 Wann immer &post_type=product hinzugefügt wurde, begann das Problem
– Adnan Ali
19. Dezember 2015 um 13:20 Uhr
Debuggen Sie auch mit anderen Themen wie tweentytwelve
– Reigel Gallarde
19. Dezember 2015 um 13:29 Uhr
13798100cookie-checkFehler beim Durchsuchen einer bestimmten post_type-Formularpost_type-Spalte mithilfe der WooCommerce-Produktsucheyes
Ich bin nur neugierig (da mir das irgendwie passiert ist); Versuchen Sie, ein Warenkorb-Widget oder eines der Woocommerce-Widgets (wie Kategorien) irgendwo (vorübergehend) auf Ihrer Seite hinzuzufügen, wo sich Ihr Suchfeld befindet, und versuchen Sie dann, mit Ihrer zweiten Zeichenfolge (mit
s=d34
). Ich wollte eine detaillierte Suche nach WooCommerce durchführen und es funktionierte nur, als ich einige andere WooCommerce-Widgets auf der Seite mit dem Suchfeld hatte. Es könnte ein Woocommerce-Problem sein …– dingo_d
2. Januar 2016 um 8:33 Uhr
Ich kann nur hier vorschlagen, versuchen Sie es mit der angegebenen URL, möglicherweise bezieht sich Ihr Problem auf die URL-Codierung der Zeichen D34 , localhost/wp/?post_type=product&s=D34 kann es einen Einblick in Ihr Problem geben, indem Sie die Where-Klausel drucken, wie die folgende Antwort vorschlägt
– Abhishek
4. Januar 2016 um 5:58 Uhr
@dingo_d Ich denke auch, dass es ein Woo-Commerce-Problem ist, oder wenn post_type = ‘product’ enthalten ist, beginnt es mit der Suche in einem bestimmten Ordner, wie Sie auf dem Bild “Home/Shop/” sehen können. Nun, ich werde es mit dem versuchen, was Sie vorgeschlagen haben.
– Adnan Ali
4. Januar 2016 um 12:04 Uhr
@Abhishek Ich habe es schon einmal mit diesem Ding versucht, aber es hat nicht die erforderlichen Ergebnisse geliefert, sondern den gleichen Fehler.
– Adnan Ali
4. Januar 2016 um 12:05 Uhr