it-swarm.com.de

Nur Titel der WooCommerce-Produktsuche

Ich hatte dies früher gefragt und es mit dem Relevanssi Plugin gelöst, aber dieses Plugin ist jetzt kaputt und ich kann es nicht mehr verwenden. Wie kann etwas so verdammt Einfaches durch Woocommerce so unmöglich gemacht werden? AAARG!

Ich habe versucht, diese Lösung zu verwenden, aber es schien für mich nicht zu funktionieren. Ich habe auch versucht, die Funktion woocommerce product_search zu durchsuchen und einen Filter hinzuzufügen, aber auch damit bin ich nicht weiter gekommen.

Hier ist das Letzte, was ich ausprobiert habe:

MarkUp

<form role="search" method="get" id="searchform" action="<?php echo home_url( '/' ); ?>">
    <input type="hidden" name="post_type" value="product" />
    <input type="text" value="" name="s" />
    <input type="submit" value="Search" />
</form> 

Rückruf des Search-SQL-Filters

// Search product titles only.
function __search_by_title_only( $search, &$wp_query ) {
    global $wpdb;
    if($_GET['post_type'] = 'product' )
        return $search;
    $q = $wp_query->query_vars;
    $n = ! empty( $q['exact'] ) ? '' : '%';
    $search =
    $searchand = '';
    foreach ( (array) $q['search_terms'] as $term ) {
        $term = esc_sql( like_escape( $term ) );
        $search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
        $searchand = ' AND ';
    }
    if ( ! empty( $search ) ) {
        $search = " AND ({$search}) ";
        if ( ! is_user_logged_in() )
            $search .= " AND ($wpdb->posts.post_password = '') ";
    }
    return $search;
}
add_filter( 'posts_search', '__search_by_title_only', 500, 2 );

Jemand? Ich stelle mir vor, es hat etwas mit dem Woocommerce-Post-Typ selbst zu tun ... sie stecken gerne eine Menge eigener Hooks und so.

1
kristina childs

Dies ist eine 9-monatige Frage, aber da ich das gleiche Problem hatte und eine Lösung gefunden habe, bin ich hierher gekommen, um sie zu posten.

In der Datei wp-content/plugins/woocommerce/classes/class-wc-query.php, function pre_get_posts( $q ) definiert WooCommerce in Zeile 114:

add_filter( 'posts_where', array( $this, 'search_post_excerpt' ) );

Dies ist der Punkt, an dem WooCommerce Ihre Anfrage durcheinander bringt!

Die Funktion search_post_excerpt wird ganz unten in Zeile 132 definiert, und Sie können sehen, dass er der Suchabfrage einen Auszug hinzufügt.

Sie haben also 2 Lösungen:

Das schlechte ist, kommentiere die Zeile 114!

//add_filter( 'posts_where', array( $this, 'search_post_excerpt' ) );

Das Gute, ich habe mich nicht implementiert, sollte aber so etwas wie einen Filter für posts_where hinzufügen, der nach WooCommerce läuft und ihn repariert. Oder vielleicht den Filter entfernen.

Ich werde besser nach der guten Lösung suchen und ich verspreche, dass ich sie hier posten werde. Aber die schlechte Lösung macht den Job ziemlich gut.

2
vinigarcia87

Soweit sieht dein Plugin gut aus. Könnten Sie die endgültige SQL-Zeichenfolge sichern und Ihrer Frage hinzufügen? Außerdem: Speichert das WC-Plugin alles in der Beitragstabelle als Beitragstyp? Wenn ja: Haben Sie eine Einschränkung für die Suche nur nach diesem Beitragstyp hinzugefügt? Sie müssen dies wahrscheinlich im $posts_clauses- Filter in der $clauses['where']-Klausel oder im posts_where- Filter tun. Ersetzen Sie einfach den Teil post_type = post durch Ihren benutzerdefinierten Beitragstyp aus WC.

0
kaiser