アルドConstenlaブラボー:
私は、ユーザーに単一の製品ページに数量フィールドに基づいて割引を与えるためにしようとしています。
基本的には、ウェブサイトは、チケットを販売していると私は大人と子供のための異なる価格を持っています。ユーザーは彼が買っているどのように多くの子供たちどのように多くの大人と入力して、私は、単一の製品ページで入力フィールドを作成しましたので。
製品の管理者で、私はとてもカートに私が子供の量に基づいて、この割引を提供したい、「子供割引」のためのACF(先進的なカスタムフィールドを)持っています。たとえば、のは、この製品のユーザーは、子供たちのために5枚のチケット、大人のための3と2を購入していることを言わせて、私はこれらの2人の子供のための割引を計算したいです。
私はこれまで試しました:
add_action( 'woocommerce_before_add_to_cart_button', 'custom_product_price_field', 5 );
function custom_product_price_field(){
echo '<div class="custom-text text">
<p>Quantity of adults:</p>
<input type="text" name="qtty_adults" value="" title="Quantity Adults" class="qtty-field">
</div>
<div class="custom-text text">
<p>Quantity of children:</p>
<input type="text" name="qtty_kids" value="" title="Quantity Kids" class="qtty-field">
</div>';
}
add_action('woocommerce_cart_calculate_fees' , 'add_user_discounts');
function add_user_discounts( WC_Cart $cart ){
global $product;
$qtty_kids = (float) sanitize_text_field( $_POST['qtty_kids'] );
$discount_per_kid = (float) get_field('children_discount', $product->id);
$discount = $qtty_kids * $discount_per_kid;
$cart->add_fee( 'Discount for children', -$discount);
}
これを行うと割引は、常に$ 0
誰も私にこれを実現する方法についていくつかの助けを与えることができますか?
LoicTheAztec:
あなたのコードは、いくつかのミスで、少し古くなっていると、あなたが期待するものを手に入れる事を欠けているのがたくさんあります...
代わりに、次の試してみてください(更新):
add_action( 'woocommerce_before_add_to_cart_button', 'custom_product_price_field', 5 );
function custom_product_price_field(){
echo '<div class="custom-text text">
<p>'.__("Quantity of adults:").'</p>
<input type="text" name="qtty_adults" value="" title="'.__("Quantity Adults").'" class="qtty-field">
</div>
<div class="custom-text text">
<p>'.__("Quantity of children:").'</p>
<input type="text" name="qtty_kids" value="" title="'.__("Quantity Kids").'" class="qtty-field">
</div>';
}
// Add selected add-on option as custom cart item data
add_filter( 'woocommerce_add_cart_item_data', 'filter_add_cart_item_data_callback', 10, 3 );
function filter_add_cart_item_data_callback( $cart_item_data, $product_id, $variation_id ) {
if ( isset( $_POST['qtty_kids'] ) && $children_discount = get_field( 'children_discount', $product_id ) ) {
$cart_item_data['children_discount'] = (float) $children_discount - (float) sanitize_text_field( $_POST['qtty_kids'] );
$cart_item_data['unique_key'] = md5( microtime().rand() ); // Make each item unique
}
return $cart_item_data;
}
// Set a discount based a product custom field(s)
add_action('woocommerce_cart_calculate_fees' , 'add_children_discount', 10, 1 );
function add_children_discount( $cart ){
if ( is_admin() && ! defined('DOING_AJAX') )
return;
if ( did_action('woocommerce_cart_calculate_fees') >= 2 )
return;
$discount = 0; // Initialising
// Loop through cart items
foreach ( $cart->get_cart() as $cart_item ) {
if( isset( $cart_item['children_discount'] ) ) {
$discount += $cart_item['children_discount'];
}
}
if ( $discount > 0 )
$cart->add_fee( __("Discount for children", "woocommerce"), -$discount );
}
テストおよび作品。
関連: