私たちは、コンピュータ部品を販売するウェブサイトを持っています。このウェブサイトには、ユーザーが部品(メインボード - CPU - RAMなど)を選択して価格を支払うことができるセクションがあります。彼らの組み立てられた製品を得るには、すべてうまく動作しますが、カートに「組立料金」を追加するオプションが必要です。 この手数料は、ユーザーが「あなたのPCを組み立てる」ウィザードプロセスを通過する場合にのみ追加する必要があります。 私はこのコードを使用していますが、すべてのカートに追加します。条件付きではないという意味です。 条件付き手数料を追加
public function calculate_fees($fees){
global $woocommerce;
$cart_subtotal = $woocommerce->cart->subtotal;
$additional_fee = 0; // Additional fee
$additional_fee_text = __('Assembling fee : ', 'dornaweb');
if($_POST['assembly_fee'] === 'flat_assembly_rate'){
$additional_fee = intval(dw_option('flat_assembly_rate')) ?: 0; // flat assembly fee
$additional_fee_text .= __(' (assembly, no warranty)', 'dornaweb');
} elseif($_POST['assembly_fee'] === 'percentage_assembly_fee') {
$additional_fee = dw_option('percentage_assembly_fee') ? ((intval(dw_option('percentage_assembly_fee'))/100) * $cart_subtotal) : 0; // percentage assembly fee
$additional_fee_text .= __(' (assembly + one year warranty)', 'dornaweb');
}
$woocommerce->cart->add_fee($additional_fee_text, intval($additional_fee), 1);
}
との
constructor
:
add_action('woocommerce_cart_calculate_fees', array($this, 'calculate_fees'));
私は(あなたのPCを組み立て)このウィザードについてもう少し説明しましょう:私たちは、このセクションの3つのステップを持って 、
- ステップを1:ユーザーは、既存の 製品からメインボード、RAM、CPUなどを選択します。
- ステップ2:リストを見て、いくつかの製品の数量を変更することができ
- ( ラムなど)ステップ3:ユーザは
が料金を組み立てるために、ページの下部に選択することができるいくつかのオプションを使用して、最終的なリストを見ます( 1.組み立てなし、 はリストを購入するだけです2. 1年間の保証で組み立てる3. を組み立てないでください)、「送信」を押すと選択したすべての製品 がカートに追加されますこの手数料 は、お客様がこの進捗状況を使用する場合にのみ追加する必要があります。
私はカートに製品を追加するが、私は、カートのページに移動するとき、それは、このように動作しませんが、私はまた、手数料を追加しようとした、追加の料金は、この方法でもありません
/* User chooses list of products (mainboard, ram, ...) and can choose quantity of each product
and also can choose whether he/she wants to get an assembled computer
or just wants to buy the products individually,
then when he/she hits submit products get added to cart all together
in this step assembling fee should be added and calculated in cart total */
if(!empty($_POST['action']) && $_POST['action'] == 'add'){
/**
* Add each product to cart based on user choice
*/
foreach($_POST['products'] as $product_id => $data) {
WC()->cart->add_to_cart($product_id, $data['qty']);
}
/**
* Add additional fees
*/
WC()->cart->add_fee('Assembling fee', 10); // 10 is an example , the fee differs depending on user choice (no assemble:0, assemlby+warranty:5% of the cart subtotal, assembly+no warranty: a flat fee eg. 20$)
WC()->cart->calculate_fees();
/**
* Redirect to cart
*/
wp_safe_redirect(WC()->cart->get_cart_url());
}
@LoicTheAztec他のユーザーが利益を得ることができるように、オンサイトでのご質問についてディスカッションを続ける方が良いです。 –
アセンブリに関する情報をセッションに保存し、その値を使用して、セッション全体でアセンブリ料金を追加するかどうかを決定します。 –