2016-06-27 10 views
5

とカートの価格オーバーライド我々はどちらかと製品の束を持っている:WooCommerce:テキスト

  • ありません価格
  • ゼロ価格

私たちは、内蔵のフックでそれらを購入作られたがチェックアウト中にカートにはまだ0 priceと表示されます。

&「特別注文」またはその他のテキストを表示するにはWooCommerceがテキストベースの価格を無効にしているようです。数のオーバーライドで正常に動作しますが、テキストをしようとしたときのデフォルトバック0 priceを表示するためにそれをオーバーライドする上記 WooCommerce: Add product to cart with price override?

はこれをしようとしました。

なぜですか?これらの製品は受注生産型であり、店舗管理者は顧客/サプライヤと話した後に価格を更新します。

答えて

4

カート内の価格と小計を表示する文字列をフィルタリングする必要があります。あなたが言及したリンクは、実際の価格を変更することについて話しました。あなたの場合、実際の価格を後で設定するまで、価格 $ 0です。そこカートはあまりに合計のために、おそらくフィルタですが、これは、開始する必要があります:カスタムになるように構成している

もちろん
add_filter('woocommerce_cart_item_price', 'so_38057349_cart_item_price', 10, 3); 
function so_38057349_cart_item_price($price, $cart_item, $cart_item_key) { 

    if ($cart_item[ 'data' ]->price == 0) { 
     $price = __('Special Order', 'yourtheme'); 
    } 

    return $price; 
} 


add_filter('woocommerce_cart_item_subtotal', 'so_38057349_cart_item_subtotal', 10, 3); 
function so_38057349_cart_item_subtotal($subtotal, $cart_item, $cart_item_key) { 

    if ($cart_item[ 'data' ]->price == 0) { 
     $subtotal = __('To be determined', 'yourtheme'); 
    } 

    return $subtotal; 
} 


add_filter('woocommerce_order_formatted_line_subtotal', 'so_38057349_order_item_subtotal', 10, 3); 
function so_38057349_order_item_subtotal($subtotal, $item, $order) { 

    if (isset($item[ 'line_subtotal' ]) && $item[ 'line_subtotal' ] == 0) { 
     $subtotal = __('To be determined', 'yourtheme'); 
    } 

    return $subtotal; 
} 

、これも0価格ですべての製品に適用されますし、そうでないかもしれない唯一のもの私がここで提供したより条件付きのロジックが必要な場合があります。

あなたのコメントをフォローアップする.... woocommerce_order_amount_totalは合計の数値であり、表示されるhtmlではありません。 cart-totals.phpテンプレートで呼び出されている関数を見ることができます。

function so_38057349_woocommerce_cart_subtotal($cart_subtotal, $compound, $cart) { 
    if($cart->subtotal == 0){ 
     $cart_subtotal = __('Order subtotal to be determined', 'yourtheme'); 
    } 
    return $cart_subtotal; 
}; 
add_filter('woocommerce_cart_subtotal', 'so_38057349_woocommerce_cart_subtotal', 10, 3); 


// define the woocommerce_order_amount_total callback 
function so_38057349_woocommerce_order_amount_total($order_total) { 
    if(WC()->cart->get_total() == 0){ 
     $order_total = __('Order total to be determined', 'yourtheme'); 
    } 
    return $order_total; 
}; 
add_filter('woocommerce_cart_totals_order_total_html', 'so_38057349_woocommerce_order_amount_total'); 

更新スクリーンショット:ヘルガの答えに拡大 cart

+0

本当にありがとうございました。それはまさに必要なものです。あなたの例を拡大して、カート&チェックアウトのページもカバーしてください! – radug

+0

私の編集をチェックしてください。あなたの質問のエラーと同様に 'woocommerce_order_amount_total'はHTML文字列ではありません。 – helgatheviking

1

、ここでも、カートページ、チェックアウトページや注文確認メールに「決定すべき」に価格を変更する完全なコードです。テキストは、人々が各フィルタがどこに行くのかを見分けることができるように、別々に保たれました

add_filter('woocommerce_cart_item_price', 'filter_cart_item_price', 10, 3); 
function filter_cart_item_price($price, $cart_item, $cart_item_key) { 
    if ($cart_item[ 'data' ]->price == 0) { 
     $price = __('Special Order', 'yourtheme'); 
    } 
    return $price; 
} 

add_filter('woocommerce_cart_item_subtotal', 'filter_cart_item_subtotal', 10, 3); 
function filter_cart_item_subtotal($subtotal, $cart_item, $cart_item_key) { 
    if ($cart_item[ 'data' ]->price == 0) { 
     $subtotal = __('To be determined', 'yourtheme'); 
    } 
    return $subtotal; 
} 

add_filter('woocommerce_cart_subtotal', 'filter_woocommerce_cart_subtotal', 10, 3); 
function filter_woocommerce_cart_subtotal($cart_subtotal, $compound, $instance) { 
    $cart_subtotal = __('To be determined 4', 'yourtheme'); 
    return $cart_subtotal; 
}; 


add_filter('woocommerce_order_formatted_line_subtotal', 'filter_order_item_subtotal', 10, 3); 
function filter_order_item_subtotal($subtotal, $item, $order) { 
    if (isset($item[ 'line_subtotal' ]) && $item[ 'line_subtotal' ] == 0) { 
     $subtotal = __('To be determined 2', 'yourtheme'); 
    } 
    return $subtotal; 
} 

add_filter('woocommerce_order_subtotal_to_display', 'filter_woocommerce_order_subtotal_to_display', 10, 3); 
function filter_woocommerce_order_subtotal_to_display($subtotal, $compound, $instance) { 
     $subtotal = __('To be determined 6', 'yourtheme'); 
    return $subtotal; 
}; 

add_filter('woocommerce_get_formatted_order_total', 'filter_woocommerce_get_formatted_order_total', 10, 2); 
function filter_woocommerce_get_formatted_order_total($formatted_total, $instance) { 
     $formatted_total = __('To be determined 8', 'yourtheme'); 
    return $formatted_total; 
}; 
関連する問題