WooCommerceその1

クライアントからのリクエストで、WooCommerceの設定をしています。

以下の3つのリクエストがありました。
1 ボタンの追加
2 1商品につき、ひとつしかカートに入らない
3カートで、カートに追加できましたメッセージを表示しない。

ボタンの追加

固定ページから複数の商品をカートに入れられる様にしたい。というリクエストがありました。
こちらは、以下のコードで 比較的簡単にボタンの追加が可能でした。

<a class="button" href="http://[ホームページURL]/[追加後に転送されるページ]/?add-to-cart=[product_id]&variation_id=[variation_id]">add to cart</a>
  • URL(ホームページのURL)
  • 追加後に転送されるページ
  • product_id
  • variation_id

以上を追加すると、ボタンが設定されます。

1商品につき、ひとつしかカートに入らない

WooCommerceでは基本設定では、1商品ひとつではなく、1バリエーションにつきひとつしかカートに入らない設定は可能です。
Tシャツ(商品)のグレー(バリエーション1)とレッド(バリエーション2)は、両方を一つのカートに入れることが可能です。
これをグレーが入っているならレッドは入らない様にしたいというのがクライアントからのリクエストです。

この要望は以下のコードをfunction.phpに追加することにより実現しました。

add_filter( 'woocommerce_add_to_cart_validation', 'wc_limit_one_per_order', 10, 2 );
function wc_limit_one_per_order( $passed_validation, $product_id ) {
		if ( !in_array( $product_id, array( 28532, 28611 ) ) ) {
		return $passed_validation;
	}

	if ( WC()->cart->get_cart_contents_count() >= 1 ) {
		wc_add_notice( __( 'This product cannot be purchased with other products. Please, empty your cart first and then add it again.', 'woocommerce' ), 'error' );
		return false;
	}

	return $passed_validation;
}

// woocommerce remove add to cart message from cart page.
add_filter( 'wc_add_to_cart_message_html', 'empty_wc_add_to_cart_message');
function empty_wc_add_to_cart_message() { 
    return ''; 
}; 

3行目で、処理をする商品を指定しています。
この商品が一つだけの場合

if ( 28532 !== $product_id ) {

という表記ですが、複数の商品について、同じ処理をする場合は、

if ( !in_array( $product_id, array( 28532, 28611 ) ) ) {

というコードになります。

カートで、「カートに追加されました」メッセージを表示させない。

これは以下のコードをfunction.phoに追加することにより、可能となりました。

add_filter( 'wc_add_to_cart_message_html', 'empty_wc_add_to_cart_message');
function empty_wc_add_to_cart_message() { 
    return ''; 
};