Lọc sản phẩm giảm giá WooCommerce trong wp-admin

Trong wp-admin WooCommerce không hỗ trợ lọc sản phẩm theo sale hay sản phẩm đang giảm giá nên nếu muốn lọc sản phẩm để quản lý khá khó khăn nên trong bài viết này Vũ Trụ Số sẽ chia sẽ đoạn code ngắn để bạn có thể lọc sản phẩm đang giảm giá trong phần quản trị sản phẩm WooCommerce

Để lọc sản phẩm giảm giá WooCommerce trong wp-admin bạn chỉ cần thêm đoạn code này vào file functions.php bạn sẽ có thêm chức năng lọc sản phẩm đang giảm giá (Filter by sale – on sales) trong phần quản trị sản phẩm wp-admin

/* Woocommerce Filter by on sale*/
function vutruso_custom_woocommerce_filter_by_onsale($output) {
    global $wp_query;
    
    $selected = filter_input(INPUT_GET, 'product_sale', FILTER_VALIDATE_INT);
    if ($selected == false) {
        $selected = 0;
    }
    
    $output .= '
        <select id="dropdown_product_sale" name="product_sale">
            <option value="">Filter by sale</option>
            <option value="1" ' . (($selected === 1) ? 'selected="selected"' : '') . '>On sale</option>
            <option value="2" ' . (($selected === 2) ? 'selected="selected"' : '') . '>Not on sale</option>
        </select>
    ';
 
    return $output;
}
add_action('woocommerce_product_filters', 'vutruso_custom_woocommerce_filter_by_onsale');
 
/* Woocommerce Filter by on sale where statement*/
function vutruso_custom_woocommerce_filter_by_onsale_where_statement($where) {
    global $wp_query, $wpdb;
 
    // Get selected value
    $selected = filter_input(INPUT_GET, 'product_sale', FILTER_VALIDATE_INT);
    
    // Only trigger if required
    if (!is_admin() || get_query_var('post_type') != "product" || !$selected) {
        return $where;
    }
 
    $querystr = '
            SELECT p.ID, p.post_parent
            FROM ' . $wpdb->posts . ' p
            WHERE p.ID IN (
                SELECT post_id FROM ' . $wpdb->postmeta . ' pm WHERE pm.meta_key = "_sale_price" AND pm.meta_value > \'\'
            )
        ';
        
        $pageposts = $wpdb->get_results($querystr, OBJECT);
        
        $productsIDs = array_map(function($n){
            return $n->post_parent > 0 ? $n->post_parent : $n->ID;
        }, $pageposts);

    if ($selected == 1) {
        $where .= ' AND ' . $wpdb->posts . '.ID IN (' . implode(",", $productsIDs) . ') ';
    } 
    elseif ($selected == 2) {
        $where .= ' AND ' . $wpdb->posts . '.ID NOT IN (' . implode(",", $productsIDs) . ') ';
    }
        
    return $where;
}
add_filter('posts_where' , 'vutruso_custom_woocommerce_filter_by_onsale_where_statement');

Sau khi thêm vào file functions.php vào trong phần quản lý sản phẩm bạn sẽ thấy phần lọc sản phẩm theo sale như dưới đây

Nếu bạn thấy bài viết có ích hãy sao chép link và chia sẻ bài viết
daotiendung

Tiến Dũng Đào chuyên quản lý, vận hành các dịch vụ website. Anh có nhiều năm kinh nghiệm về VPS, Hosting, technical SEO, CMS. Đặc biệt yêu thích WordPress với hơn 5 năm phát triển theme và plugin. Sở thích của anh là đọc, viết blog, đi du lịch, tập võ và chia sẻ các kiến thức cho mọi người.

Bài viết liên quan