Woocommerceでは、カートの重量が100ポンドを超える場合、顧客の注文全体に10%の割引を適用する方法を見つけようとしています。私はこれを達成する方法の一部です。次のステップでは、プログラム/関数/フック経由でクーポンコードをfunctions.phpに適用する方法を探しています。Woocommerceでプログラムでクーポンを適用するにはどうすればよいですか?
私は関数woocommerce_ajax_apply_coupon(http://docs.woothemes.com/wc-apidocs/function-woocommerce_ajax_apply_coupon.html)を使用することができますが、私はそれを使用する方法が不明です。
これまで、cart.phpを変更してカート内のすべての商品の合計重量を取得しました。割引を適用するクーポンを作成しました(手動で入力した場合)。 .phpを使用して重量を確認し、ユーザーにメッセージを表示します。
EDIT:部分コードが削除され、完成したコードが以下のソリューションに含まれています。
ガーニングフレニアです。ここで成功した条件が満たされたときに割引クーポンを適用しても、それがもはや満たさだときにそれを削除していない作業最終結果です:
/* Mod: 10% Discount for weight greater than 100 lbs
Works with code added to child theme: woocommerce/cart/cart.php lines 13 - 14: which gets $total_weight of cart:
global $total_weight;
$total_weight = $woocommerce->cart->cart_contents_weight;
*/
add_action('woocommerce_before_cart_table', 'discount_when_weight_greater_than_100');
function discount_when_weight_greater_than_100() {
global $woocommerce;
global $total_weight;
if($total_weight > 100) {
$coupon_code = '999';
if (!$woocommerce->cart->add_discount(sanitize_text_field($coupon_code))) {
$woocommerce->show_messages();
}
echo '<div class="woocommerce_message"><strong>Your order is over 100 lbs so a 10% Discount has been Applied!</strong> Your total order weight is <strong>' . $total_weight . '</strong> lbs.</div>';
}
}
/* Mod: Remove 10% Discount for weight less than or equal to 100 lbs */
add_action('woocommerce_before_cart_table', 'remove_coupon_if_weight_100_or_less');
function remove_coupon_if_weight_100_or_less() {
global $woocommerce;
global $total_weight;
if($total_weight <= 100) {
$coupon_code = '999';
$woocommerce->cart->get_applied_coupons();
if (!$woocommerce->cart->remove_coupons(sanitize_text_field($coupon_code))) {
$woocommerce->show_messages();
}
$woocommerce->cart->calculate_totals();
}
}
私はすでにバックエンドにクーポンを持っています: "999"私はクーポンを適用するためにあなたが提供したコードを追加しました。しかし、私がwoocommerceカートページに行くと、私は今エラーを取得しています:行65 [if_start add_discount]の[path to ...] functions.phpの非オブジェクト上のメンバ関数add_discount()を呼び出してください。オリジナルの投稿のコードを更新して、どのように見えるかを示します。 – msargenttrue
'$ total_weight'行とともに' global $ woocommerce; 'を追加してみてください。 – Freney
ありがとう、それは働いた!だから今私は正常に割引を適用することができますが、今私は別の問題に気付いています...ユーザーがいくつかのカートアイテムを削除し、カートが100ポンド以下に戻った場合、割引はまだそこにあります。カートが条件を満たしていない場合、ユーザーがこのクーポンを利用することができないように、割引を削除する方法を探しています。 add_discountの逆の方法で動作するremove_discount関数があると思いますが、私はWoocommerce APIドキュメントで見つけられませんでした:http://docs.woothemes.com/wc-apidocs/ – msargenttrue