webentwicklung-frage-antwort-db.com.de

So fügen Sie der Suche eine benutzerdefinierte Taxonomie hinzu

Ich habe also eine Taxonomie, die "Autos" heißt. Ich würde das wünschen, wenn Benutzer sucht, würde es auch durch Taxonomie suchen. Das bedeutet, dass in der Taxonomie "Autos", wenn ich den Begriff "Audi" und die Benutzersuche mit dem Schlüsselwort "audi" habe, Beiträge zurückgegeben werden, die mit dem Begriff "audi" gekennzeichnet sind.

Ich habe es versucht:

function mytheme_pre_get_posts( $query ) {
$query->set( 'tax_query', array(
        array(
            'taxonomy' => 'cars',
            'field'    => 'name',
            'terms'    =>  $_GET['s'],
        )
    ));
add_action( 'pre_get_posts', 'mytheme_pre_get_posts', 1 );

Aber das bricht die Suche komplett ab. Kann das überhaupt gemacht werden oder habe ich etwas verpasst?

2
user995317

Sie könnten versuchen, die ursprüngliche Suchabfrage zu deaktivieren, andernfalls könnten Sie sich verdoppeln und die Kombination führt zu nichts? Versuchen Sie beispielsweise, Ihrer Funktion Folgendes hinzuzufügen:

$query->set('s','');

UPDATE

Ich bin mir nicht sicher, aber Sie können den Operator AND -I think verwenden, um die vorhandene Abfrage zu ergänzen, anstatt sie zu ersetzen ...

function mytheme_pre_get_posts( $query ) {
    if ( !is_admin() && $query->is_search() && $query->is_main_query() ) {
        $term = get_term_by('name', get_query_var('s'), 'cars');
        if ($term) {
            $query->set( 'tax_query', array(
                 array(
                    'taxonomy' => 'cars',
                    'field'    => 'slug',
                    'terms'    =>  $term->slug,
                    'operator' => 'AND'
                )
            ));
         }
    }
}
add_action( 'pre_get_posts', 'mytheme_pre_get_posts', 1 );

Hinweis: Die Verwendung des Felds name wurde wie von @PieterGoosen in slug geändert, und der vorab abgerufene Begriff slug zur Übergabe an die Steuerabfrage sowie zusätzliche Bedingungen wie von @birgire erwähnt.

2
majick