Woocommerce, ワードプレス

WooCommerceの特定のカテゴリーに属する商品を一度にカートに入れられる数を制限する

WordPressのプラグインWooCommerceを使ったECサイトでの備忘録。

特定の商品カテゴリーに属する商品にだけ、一度にカートにいれられる数(今回は2つまで)を制限する。というもの。以下をfunctions.phpに追記して実装。

[php]

// On single product pages
add_filter( ‘woocommerce_quantity_input_args’, ‘max_qty_input_args’, 20, 2 );
function max_qty_input_args( $args, $product ) {

## —- Your settings —- ##

$product_categories = array(‘clay’);

$quantity = 2;

## —- The code: set max quantity for specific product categories —- ##

$product_id = $product->is_type(‘variation’) ? $product->get_parent_id() : $product->get_id();

if( has_term( $product_categories, ‘product_cat’, $product_id ) ){
$args[‘max_value’] = $quantity;
}

return $args;
}

// On archives pages
add_filter( ‘woocommerce_loop_add_to_cart_link’, ‘max_qty_loop_add_to_cart_button’, 50, 2 );
function max_qty_loop_add_to_cart_button( $button, $product ) {
// Only for non variable products
if( $product->is_type( ‘variable’ ) ) return $button; // Exit

## —- Your settings —- ##

$product_categories = array(‘clay’);

$quantity = 2;

## —- The code: set max quantity for specific product categories —- ##

if( has_term( $product_categories, ‘product_cat’, $product->get_id() ) ){
$class = implode( ‘ ‘, array_filter( array(
‘button’,
‘product_type_’ . $product->get_type(),
$product->is_purchasable() && $product->is_in_stock() ? ‘add_to_cart_button’ : ”,
$product->supports( ‘ajax_add_to_cart’ ) ? ‘ajax_add_to_cart’ : ”,
) ) );

$button = sprintf( ‘<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s">%s</a>’,
esc_url( $product->add_to_cart_url() ),
esc_attr( isset( $quantity ) ? $quantity : 1 ),
esc_attr( $product->get_id() ),
esc_attr( $product->get_sku() ),
esc_attr( isset( $class ) ? $class : ‘button’ ),
esc_html( $product->add_to_cart_text() )
);
}
return $button;
}
[/php]

でも、これだと同一カテゴリーに属する商品A、B、Cがあったとして、
Aを2つ、Bを2つ、Cを2つ・・・のようにそれぞれ2つずつ入っちゃう:-(
カート全体に制限しなければいけなかったようで、やりたかったことと違うのだけれど、誰かのお役に立てれば幸いです。
「clay」を任意のカテゴリースラッグに変えてつかってください。
あとこれ「max」をすべて「min」に置換すると最小値も設定できるようなので(確認が安易なので違ったらごめんない)もし良ければ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA