web-dev-qa-db-ja.com

WooCommerce - カートアイテムとカート合計にカスタムフィールドを追加する方法

私はWooCommerceプラグインを使用しており、次のようなクエリがあります。

単一の商品ページ内に、購入者による特定の選択に基づいて配送料の値が計算される商品があります。これをカート項目の一部として新しい列「配送料」として渡すか含める必要があります。カートを見る.

しかし、問題は、「カートに追加」ボタンを3回押した後に、購入者が3つの異なる製品を購入することにした場合、これら3つの製品のそれぞれが送料の計算を変える可能性があることです。

例えば:

Product A selections calculates a Shipping Cost of $2.00
Product B selections calculates a Shipping Cost of $4.00
Product C selections calculates a Shipping Cost of $6.00

それで、上記に基づいて、買い手が買い物を終えて、そして「カートを見る」を押すとき、私は彼らが見ることを望みます:

Item                       Price      Shipping Cost      Quantity          Total     
---------------------------------------------------------------------------------------
Product A                      $10        $2                     1                 $10
Product B                      $5         $4                     1                 $5
Product C                      $15        $6                     1                 $15

それは私がカートに追加したい「送料」カスタムフィールド列です、それは私がどうするべきかわからないものです。

上記に加えて、以下の「カート合計」に合計12ドルとなる「送料」のカスタムフィールドを追加します。

Cart Totals

Cart Subtotal       $30
Shipping Cost       $12

Order Total         $42

私がカートに使用したコードのいくつかは以下の通りです:

function woo_add_cart_fee() {
  global $woocommerce;
  $woocommerce->cart->add_fee( __('Shipping Cost', 'woocommerce'), 100 );
}
add_action( 'woocommerce_before_calculate_totals', 'woo_add_cart_fee');

だから、私はカートの商品の詳細とカートの合計の両方に「送料」を追加する方法を知る必要があります。

どんなコーディングの助けでも大いに評価されるでしょう。

ありがとう。

7
tonyf

まず、商品を編集するときにカスタムフィールドを保存します。 custom_shipping_costカスタムフィールドを使用しているとしましょう。たとえば20ドルではなく、20として数値として保存されていることを確認してください。

その後、カートページにこのフィールドを表示する必要があります。残念ながら、cartテーブルに新しい列を追加するためのフィルタはないので、テンプレートファイルを編集する必要があります。列にする必要がない場合は、代わりにこのコードを使用して最後の値に余分な値を追加します。カラム:

add_filter('woocommerce_cart_item_subtotal','additional_shipping_cost',10,3);
function additional_shipping_cost($subtotal, $values, $cart_item_key) {
    //Get the custom field value
    $custom_shipping_cost = get_post_meta($post->ID, 'custom_shipping_cost', true);

    //Just for testing, you can remove this line
    $custom_shipping_cost = 10;

    //Check if we have a custom shipping cost, if so, display it below the item price
    if ($custom_shipping_cost) {
        return $subtotal.'<br>+'.woocommerce_price($custom_shipping_cost).' Shipping Cost';
    } else {
        return $subtotal;   
    }
}

これで、質問の最初の部分は終わりです。上記の例のように表示したい場合は、plugins/woocommerce/templates/cart/cart.phpファイルをthemes/yourtheme/woocommerce/cart/cart.phpに複製する必要があります。それからファイルを編集し、あなた自身の列を追加してください、あなたは価格を表示するために上記のコードを使うことができます。

この後、追加費用でカートの合計を更新する必要があります。 add_feeを含むコードが役に立ちます。

function woo_add_cart_fee() {
    global $woocommerce;

    $extra_shipping_cost = 0;
    //Loop through the cart to find out the extra costs
    foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
        //Get the product info
        $_product = $values['data'];

        //Get the custom field value
        $custom_shipping_cost = get_post_meta($_product->id, 'custom_shipping_cost', true);

        //Just for testing, you can remove this line
        $custom_shipping_cost = 10;

        //Adding together the extra costs
        $extra_shipping_cost = $extra_shipping_cost + $custom_shipping_cost;
    }

    //Lets check if we actually have a fee, then add it
    if ($extra_shipping_cost) {
        $woocommerce->cart->add_fee( __('Shipping Cost', 'woocommerce'), $extra_shipping_cost );
    }
}
add_action( 'woocommerce_before_calculate_totals', 'woo_add_cart_fee');

それはそれだ、それは今後動作するはずです。両方のコードからJust for testing ...行を必ず削除してください。テスト用に自分のサイトにカスタムフィールドを作成しませんでした。

4
passatgt