Sắp xếp sản phẩm mới nhất trước, hết hàng sau cùng của Woocommerce

Vào một ngày đẹp trời, VietThemeShop nhận làm website bằng WordPress cho khách hàng và Khách hàng này yêu cầu là phải sắp xếp sản phẩm mới nhất trước nhưng cái nào hết hàng rồi thì phải cho xuống dưới cùng. Tuy nhiên Woocommerce không có tùy chọn này. Vì vậy mà phải code cho tùy chọn này. Nếu các bạn gặp trường hợp này thì chỉ việc bê nguyên đoạn code sau để vào file functions.php trong theme bạn đang sử dụng là được

/* Sắp xếp sản phẩm mới nhất trước, hết hàng sau cùng */
add_action( 'pre_get_posts', function ( $q ) {
    if (   !is_admin()                // Target only front end
         && is_woocommerce()          // Target only WooCommerce
         && $q->is_main_query()       // Only target the main query
    ) {
        $q->set( 'meta_key', '_stock_status' );
        $q->set( 'orderby', array('meta_value' => 'ASC', 'date' => 'DESC') );
    }
}, PHP_INT_MAX );

Xem Demo: TẠI ĐÂY

Nếu các bạn chỉ cần Sắp xếp sản phẩm hết hàng xuống cuối danh sách sản phẩm của woocommerce thì sử dụng đoạn code phía dưới

/* Sắp xếp sản phẩm hết hàng xuống cuối danh sách sản phẩm */
add_filter('posts_clauses', 'devvn_order_by_stock_status', 2000);
function devvn_order_by_stock_status($posts_clauses) {
    global $wpdb;
    if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag())) {
        $posts_clauses['join'] .= " INNER JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id) ";
        $posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby'];
        $posts_clauses['where'] = " AND istockstatus.meta_key = '_stock_status' AND istockstatus.meta_value <> '' " . $posts_clauses['where'];
    }
    return $posts_clauses;
}

Chúc các bạn thành công

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

034.223.8583 Nhắn tin Facebook 034.223.8583