web-dev-qa-db-ja.com

WooCommerceでカートの合計金額を変更する

カートの合計に0しか表示されない問題が発生しています

基本的に私がしようとしていることは、すべてのカートアイテムがカートの小計に追加された後、特定の金額のデポジットの合計のみを受け入れることです。

たとえば、顧客が100ドル相当の商品を追加した場合、最初に10ドル、または合計値として小計の(10%)のみを支払うことになります。

私はここからコードを取得しました: Change total and tax_total Woocommerce を次のようにカスタマイズします:

add_action('woocommerce_cart_total', 'calculate_totals', 10, 1);

function calculate_totals($wc_price){
$new_total = ($wc_price*0.10);

return wc_price($new_total);
} 

しかし、そのコードが有効な場合、合計金額は0.00を示します。コードを削除すると、標準の合計が得られます。

また、完全なAPIがリストされているwoocommerceサイトでは見つかりませんでした。プラグインの作成方法に関する一般的な記事のみです。

どんな助けでも、正しい方向でのポイントも素晴らしいでしょう。

7
DEVPROCB

Woocommerce 3.2以降これ以上機能しません新しいクラス _WC_Cart_Totals_ ...

新しい答え: Woocommerce 3.2+でフックを使用してカートの合計を変更


最初の_woocommerce_cart_total_フックはfilterフックであり、アクションフックではありません。 _wc_price__woocommerce_cart_total_の引数はフォーマット済みの価格なので、10ずつ増やすことはできません%。それがゼロを返す理由です。

Woocommerce v3.2より前いくつかのように機能します_WC_Cart_プロパティ 直接アクセスできます

_woocommerce_calculate_totals_アクションフックにフックされたカスタム関数を使用するほうがよい
こちらです:

_// Tested and works for WooCommerce versions 2.6.x, 3.0.x and 3.1.x
add_action( 'woocommerce_calculate_totals', 'action_cart_calculate_totals', 10, 1 );
function action_cart_calculate_totals( $cart_object ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( !WC()->cart->is_empty() ):
        ## Displayed subtotal (+10%)
        // $cart_object->subtotal *= 1.1;

        ## Displayed TOTAL (+10%)
        // $cart_object->total *= 1.1;

        ## Displayed TOTAL CART CONTENT (+10%)
        $cart_object->cart_contents_total *= 1.1;

    endif;
}
_

コードは、アクティブな子テーマ(またはテーマ)のfunction.phpファイル、または任意のプラグインファイルにあります。

このフックで WC_cartadd_fee() メソッドを使用することもできますCristina答え。

9
LoicTheAztec

これはこの質問の答えにはなりません。ロイックはします。これは、10%オフの広告申込情報を表示する別の方法です。

function prefix_add_discount_line( $cart ) {

  $discount = $cart->subtotal * 0.1;

  $cart->add_fee( __( 'Down Payment', 'yourtext-domain' ) , -$discount );

}
add_action( 'woocommerce_cart_calculate_fees', 'prefix_add_discount_line' );

enter image description here

15
Christina