Fehler beim Durchsuchen einer bestimmten post_type-Formularpost_type-Spalte mithilfe der WooCommerce-Produktsuche

Lesezeit: 4 Minuten

Benutzer-Avatar
Adnan Ali

ich benutze dieser Code Produkte suchen von a WordPress/WooCommerce Webseite.
Meine Anforderung ist, dass die URL wie folgt lautet:http://localhost/wp/?s=D34&post_type=product” Während s=D34 ist eine Suchzeichenfolge.

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 Geben Sie hier die Bildbeschreibung ein

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

Welche Modifikation ist also erforderlich?

URL http://localhost/wp/?orderby=price&post_type=product funktioniert gut

aber was ist los mit http://localhost/wp/?s=D34&post_type=product

  • 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

Benutzer-Avatar
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 …

mit 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")

mit 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")

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

1379810cookie-checkFehler beim Durchsuchen einer bestimmten post_type-Formularpost_type-Spalte mithilfe der WooCommerce-Produktsuche

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy