web-dev-qa-db-fra.com

Les produits woocommerce cachés apparaissent toujours dans les résultats de recherche

Je suis vraiment nouveau dans l'édition php mais j'essaie d'apprendre. Mes produits woocommerce définis sur "masqué" sous la visibilité du catalogue apparaissent toujours dans les résultats de la recherche. Comment garder les produits cachés hors de mes résultats de recherche? J'ai trouvé ce fil ( WP_Query: exclure les produits cachés de la liste de produits WooCommerce ) et j'ai essayé d'ajouter le code ci-dessous mentionné au bas du fil (j'utilise Woocommerce 3.2.1) au fichier functions.php de mon thème enfant . Cela m'a donné l'écran blanc de la mort et cette erreur:

Erreur d'analyse: erreur de syntaxe, inattendu '=>' (T_DOUBLE_ARROW).

<?php
/*
Code to remove hidden woocommerce products from being displayed in a site search
*/
'tax_query' => array(
                  array(
                        'taxonomy' => 'product_visibility',
                        'field'    => 'name',
                        'terms'    => 'exclude-from-catalog',
                        'operator' => 'NOT IN',

                  )
              ) 

Apprécier l'aide dans ce que je fais mal. Merci!

1
Abby G.

Ce code ne peut pas être ajouté n'importe où et ne peut pas être ajouté à functions.php ou à tout autre fichier php de ce type. C'est un élément du tableau utilisé pour créer l'objet de requête WordPress. Il doit être ajouté via la classe WP_Query ou les fonctions get_posts et query_posts, ou via le filtre pour modifier la requête de la page principale.

Mais, sans en savoir plus sur le fonctionnement de votre modèle de recherche, il n’ya aucun moyen de vous aider. Si vous travaillez avec un modèle de recherche classique, c'est le code qui appliquera le filtre de taxonomie que vous devez utiliser, et vous pouvez l'ajouter au fichier functions.php:

add_action('pre_get_posts', 'wpse_187444_search_query_pre');

function wpse_187444_search_query_pre($query) {
    if ($query->is_search() && $query->is_main_query()) {
        $tax_query = $query->get('tax_query', array());

        $tax_query[] = array(
            'taxonomy' => 'product_visibility',
            'field'    => 'name',
            'terms'    => 'exclude-from-catalog',
            'operator' => 'NOT IN',
        );

        $query->set('tax_query', $tax_query);
    }
}

Toutefois, cela pourrait ne pas fonctionner pour vous, cela dépend de votre modèle de recherche et de la manière dont les résultats de la recherche sont interrogés.

2
Milan Petrovic