web-dev-qa-db-ja.com

最新の商品を最初に表示するが、クエリの最後に「完売」を表示する

私はWooCommerceを使用しています。アーカイブページのクエリの最後に「在庫切れ」の商品を表示したいと思います。どうやってやるの?

現在、次のカスタムクエリを使用して最新の製品ショーを最初に作成しています。

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

だから、私たちは両方をやりたいのです。最新の商品を最初に表示しますが、新しい商品に関係なく「在庫切れ」の商品を表示します。

心から、ミカ

1
Mika Kaltoft

outofstockinstockの2つの在庫ステータスしかない場合、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 );

あなたはそれをあなたのニーズに合わせるべきです

3
Pieter Goosen