web-dev-qa-db-fra.com

Afficher les produits récents en premier mais "épuisé en dernier" dans la requête

J'utilise WooCommerce et j'aimerais afficher les produits "en rupture de stock" en dernier dans la requête sur la page d'archives. Comment puis je faire ça?

Actuellement, nous faisons d’abord l’émission de produit la plus récente avec la requête personnalisée suivante:

add_action( 'pre_get_posts', 'mik_exclude_category' );
function mik_exclude_category( $query ) {
    if ( $query->is_main_query() ) {
        $query->set( 'orderby', 'date' );
        $query->set( 'order', 'DESC' );
    }
}

Donc, nous aimerions faire les deux. Affichez les produits les plus récents en premier, mais affichez les produits "en rupture de stock", quelle que soit leur nouveauté.

Cordialement, Mika

1
Mika Kaltoft

Si nous ne disposons que de deux statuts de stock, à savoir outofstock et instock, nous pouvons très facilement effectuer un tri avec pre_get_posts

add_action( 'pre_get_posts', function ( $q ) {
    if (   !is_admin()                 // Target only front end 
         && $q->is_main_query()        // Only target the main query
         && $q->is_post_type_archive() // Change to suite your needs
    ) {
        $q->set( 'meta_key', '_stock_status' );
        $q->set( 'orderby',  'meta_value'    );
        $q->set( 'order',    'ASC'           );
    }
}, PHP_INT_MAX );

Vous devriez adapter cela à vos besoins

3
Pieter Goosen