Pergunta

I am using WooCommerce and would would like to show the "out of stock" products last in the query on the archive page. How can I do that?

Currently we are making the newest product show first with the following custom query:

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' );
    }
}

So, we would like to do both. Show the newest products first, but show "out of stock" products last no matter how new they are.

Sincerely, Mika

Foi útil?

Solução

If we only have two stock statuses, namely outofstock and instock, we can very easily achieve sorting with 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 );

You should adjust that to your needs

Licenciado em: CC-BY-SA com atribuição
Não afiliado a wordpress.stackexchange
scroll top