it-swarm.com.de

Suchergebnisse filtern

Ich habe Seiten, Posts und Woocommerce-Produktkategorien und -Produkte auf meiner Website. Ich möchte die Standardsuchabfrage von WordPress so einschränken, dass sie die Beiträge, die Seiten, die Produktkategorien, aberNICHTeinzelne Produkte zurückgibt. In meinem functions.php verwende ich den folgenden Code, mit dem ich problemlos nur Posts und Seiten anzeigen kann. Was ich jetzt brauche, ist, die Woocommerce-Produktkategorien zusammen mit meinen Posts und Seiten im Suchergebnis anzuzeigen, aberNICHTdie einzelnen Produkte. Bitte hilf mir hier raus.

function searchfilter($query) {

if ($query->is_search && !is_admin() ) {
    $query->set('post_type',array('post','page'));
}

return $query;
}

add_filter('pre_get_posts','searchfilter');

Möglicherweise müssen Sie eine tax_query für die Woocommerce-Taxonomie (mit dem Namen 'product_cat') einfügen:

    $tax_query = array(
        array(
            'taxonomy' => 'product_cat'
        ),
    );
    $query->set( 'tax_query', $tax_query );   
}

return $query;
}

Sie müssen jedoch sicherstellen, dass Sie Beiträge UND Seiten UND Produktkategorien zurückgeben können und dass die Suchergebnisse verwechselt werden.

Ich hätte gedacht, eine bessere Lösung, als auf der Ebene von functions.php zu filtern, wäre, Ihre search.php für die Anzeige der Suchergebnisse anzupassen. Sie können dann ganz gezielt sein, zum Beispiel zeigen:

Posts with this search include:
PostX, PostY, PostZ.

Und dann noch eine Schleife mit:

Pages with this search include:
PageA, PageB, PageC.

Und dann noch eine Schleife mit:

Product Categories with this search include:
Product Cat A, Product Cat F, Product Cat Z.

Ist das das Ergebnis, nach dem Sie suchen, oder möchten Sie JEDE Suche auf Ihrer Website filtern und die Ergebnisse verwechseln?

3
Monkey Puzzle
add_action('pre_get_posts','search_filter_exc_posts');
function search_filter_exc_posts($query) {
    // Verify that we are on the search page & this came from the search form
    if($query->query_vars['s'] != '' && is_search())
    {
        $q_tax_query = $query->query_vars["tax_query"];
        // append product categories to current tax query.
        $query->set('tax_query', $q_tax_query[]=array('taxonomy'=>'product_cat') );
    }
}
0
Emin Özlem