2
votes

Masquer les produits "en rupture de stock" sur la page d'accueil de WooCommerce

Je ne souhaite pas afficher les produits "en rupture de stock" sur ma page d'accueil. J'ai essayé des hooks et des filtres WooCommerce pour modifier la requête du produit, mais cela ne fonctionne pas. J'ai également coché "Masquer en rupture de stock" dans la zone de paramétrage de woocommerce.

mais le produit apparaît toujours. Puis-je avoir une idée de ce qui se passe.

J'ai essayé ce crochet de filtre pour modifier la requête principale du produit:

add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

function custom_pre_get_posts_query( $q ) {

if ( ! $q->is_main_query() ) return;
if ( ! $q->is_post_type_archive() ) return;
if ( ! is_admin() ) {


$q->set( 'meta_query', array(array(
    'key'       => '_stock_status',
    'value'     => 'outofstock',
    'compare'   => 'NOT IN'
)));

}

remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

}

Je veux me cacher en rupture de stock produits mais rien ne fonctionne. Toute aide est appréciée.


0 commentaires

3 Réponses :


0
votes

Vous utilisez le code de l'ancienne version de WooCommerce. Essayez cette approche.

add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

function custom_pre_get_posts_query( $q ) {

    if ( ! $q->is_main_query() || is_admin() || ! $q->is_front_page() ) {
        return;
    }

    if ( $outofstock_term = get_term_by( 'name', 'outofstock', 'product_visibility' ) ) {

        $tax_query = (array) $q->get('tax_query');

        $tax_query[] = array(
            'taxonomy' => 'product_visibility',
            'field' => 'term_taxonomy_id',
            'terms' => array( $outofstock_term->term_taxonomy_id ),
            'operator' => 'NOT IN'
        );

        $q->set( 'tax_query', $tax_query );

    }
}


0 commentaires

1
votes

Pour exclure les produits "En rupture de stock" de votre page d'accueil, vous pouvez le faire de différentes manières.

1) Une méta-requête à l'aide du crochet de filtre dédié woocommerce_product_query_meta_query :

add_filter( 'woocommerce_product_query_tax_query', 'filter_product_query_tax_query', 10, 2 );
function filter_product_query_tax_query( $tax_query, $query ) {
    // On woocommerce home page only
    if( is_front_page() ){
        // Exclude products "out of stock"
        $tax_query[] = array(
            'taxonomy' => 'product_visibility',
            'field'    => 'name',
            'terms'    => array('outofstock'),
            'operator' => 'NOT IN'
        );
    }
    return $tax_query;
}

2) Une requête fiscale utilisant le hook de filtre dédié woocommerce_product_query_tax_query :

add_filter( 'woocommerce_product_query_meta_query', 'filter_product_query_meta_query', 10, 2 );
function filter_product_query_meta_query( $meta_query, $query ) {
    // On woocommerce home page only
    if( is_front_page() ){
        // Exclude products "out of stock"
        $meta_query[] = array(
            'key'     => '_stock_status',
            'value'   => 'outofstock',
            'compare' => '!=',
        );
    }
    return $meta_query;
}


0 commentaires

0
votes

<₹UPDATE

Vérifiez le fichier font-page.php dans votre dossier de thème actuel, peut-être que vos développeurs ont ajouté un code personnalisé dans vos fichiers de modèle sans appeler aucune action de hook.

ANCIENNE RÉPONSE

Pourquoi ne pas utiliser les paramètres WooCommerce?

  1. Accédez à Woocommerce → Paramètres et cliquez sur l'onglet Produits
  2. Cliquez sur le lien Inventaire en haut
  3. Cochez l'option Masquer les articles en rupture de stock dans le catalogue pour masquer les articles en rupture de stock

1 commentaires

Parce que c'est seulement pour la page d'accueil (comme le titre l'indique) et si vous lisez la question, l'OP a déjà essayé ce que vous suggérez.