web-dev-qa-db-fra.com

Filtrage des résultats de recherche

J'ai des pages, des articles et des catégories de produits woocommerce et des produits sur mon site Web. Je veux limiter la requête de recherche par défaut wordpress afin qu’elle renvoie les articles, les pages, les catégories de produits maisPASproduits individuels. J'utilise le code suivant dans mon functions.php avec lequel je peux facilement afficher uniquement les publications et les pages. Ce dont j'ai besoin maintenant, c’est de montrer les catégories de produits woocommerce ainsi que mes publications et pages dans les résultats de la recherche, maisPASles produits individuels. S'il vous plaît aidez-moi ici.

function searchfilter($query) {

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

return $query;
}

add_filter('pre_get_posts','searchfilter');
2

Vous devrez peut-être inclure une requête tax_query pour la taxonomie Woocommerce (appelée 'product_cat'):

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

return $query;
}

Cependant, vous devrez vous assurer que vous pouvez renvoyer des articles ET des pages ET des catégories de produits et noter que les résultats de la recherche seront mélangés.

J'aurais pensé qu'une meilleure solution, plutôt que de filtrer au niveau functions.php, serait d'adapter votre search.php à l'affichage des résultats de la recherche. Vous pouvez alors être très ciblé, par exemple, montrer:

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

Et puis une autre boucle avec:

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

Et puis une autre boucle avec:

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

Est-ce le genre de résultat que vous recherchez ou voulez-vous filtrer TOUTES les recherches sur votre site et mélanger les résultats?

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