Shortcode đếm số sản phẩm nằm trong danh mục sản phẩm

Đây là 2 đoạn shortcode nho nhỏ mình sưu tầm lại được trong quá trình “tìm cách” show số sản phẩm nằm trong một danh mục sản phẩm của Woocommerce. Cả 2 cách đều hiển thị tốt

Việc bạn cần làm là gì?

Vẫn như mọi khi, copy và “vứt” nó vào function.php của theme ( hoặc child-theme ) bạn đang dùng -> Gọi shortcode là xong!

Bắt đầu thôi!

Cách 1

# Shortcode đếm số lượng sản phẩm trong một Danh mục sản phẩm
# Excample `[products-counter category="dtdd"]` OR `[products-counter category="18"]`
add_shortcode( 'products-counter', 'products_counter' );
function products_counter( $atts ) {
    $atts = shortcode_atts( [
        'category' => '',
    ], $atts );
    $taxonomy = 'product_cat';
    if ( is_numeric( $atts['category'] ) ) {
        $cat = get_term( $atts['category'], $taxonomy );
    } else {
        $cat = get_term_by( 'slug', $atts['category'], $taxonomy );
    }
    if ( $cat && ! is_wp_error( $cat ) ) {	
    return $cat->count;
    }
    return '';
}
Cách dùng: có thể gọi bằng 2 cách khác, đó là thông qua slug hoặc id của danh mục sản phẩm. Cách lấy slug hoặc id như thế nào thì cứ để lại comment hoặc inbox facebook mình nhé
  • [products-counter category="may-loc-nuoc"]Chú ý “slug” là đường dẫn của danh mục sản phẩm, trong đó may-loc-nuoc chính là slug mình cần đếm số lượng sản phẩm
  • [products-counter category="18"]Tương tự, mình chỉ cần gọi ID của danh mục là xong

Cách 2

add_shortcode( 'products-counter', 'products_counter' );
function products_counter( $atts ) {
  $atts = shortcode_atts( [
        'category' => '',
    ], $atts );
  $args = array(
    'post_type' => 'product',
    'posts_per_page' => -1,
    'tax_query' => array(
        array(
            'taxonomy' => 'product_cat',
            'field' => 'slug',
            'terms' => $atts['category']
        )
    ),
    'meta_query' => array(
        array(
            'key' => '_stock_status',
            'value' => 'instock'
        ),
    )
);
$query = new WP_Query($args);
$inStockCount = $query->found_posts;
    if ( $query && ! is_wp_error( $query ) ) {
    return $inStockCount;
    }
    return '';
}
Giải thích: Cách này đếm số lượng sản phẩm còn hàng nằm trong danh mục và cách dùng là…[products-counter category="may-loc-nuoc"] cách này thì gọi thẳng slug của danh mục đó.

Tạm thế đã, hết rồi!