2017-11-24 17 views
1

現在、WooCommerce機能を備えたWordPress Webサイトで作業しています。WooCommerceのカート項目のカスタムフィールド値を動的に取得

各製品ページには、サイト訪問者が製品に適用するテキストを入力するためのカスタムフィールドがあります。料金は、「1文字ごとに入力する」基準で適用されます。製品の全体的なコストを動作するように

(製品価格+カスタム文字が入力した)、私はfunctions.phpファイルに、次のコードを挿入している:上記のコードは絶対にうまく動作します

<?php 
    function calculate_engrave_text_fee($cart_object) { 
     foreach ($cart_object->cart_contents as $key => $value) { 
      if(isset($value["engrave_text"])) { 
       // Quantity of characters entered into Custom Text Field: 
       $chars = strlen($value["engrave_text"]); 
       // Characters Entered Multiplied by Cost of Each Letter: 
       $engrave_text_fee = $chars * 3; //Need to dynamically call this. 
       $orgPrice = floatval($value['data']->price); 
       $value['data']->set_price($orgPrice + $engrave_text_fee); 
      } 
     } 
    } 
    add_action('woocommerce_before_calculate_totals', 'calculate_engrave_text_fee', 99); 
?> 

。 1つ例外があります。

各レターのコストは製品によって異なりますので、$engrave_text_fee = $chars * 3;のような静的なエントリは理想的ではありません。また、WooCommerce製品ダッシュボードにカスタムフィールドを作成して、サイト管理者が各製品のカスタムレターの価格を入力できるようにしました。

問題

が動的にWooCommerce製品のダッシュボードから、カスタムフィールドのエントリを呼び出し、上記の数学にこれを配置するには、私が交換してみました:と$engrave_text_fee = $chars * 3;:残念ながら

$engrave_text_fee = $chars * <?php global $post; echo get_post_meta($post->ID,'_pricing_engrave_text_option',true)?>; 

、これをウェブサイトをオフラインにするだけです。私は、コーディングの構文に問題があると仮定することができます!私はここで間違っているかもしれないと指摘できる人は誰ですか?

答えて

1

次のようになります。

add_action('woocommerce_before_calculate_totals', 'calculate_engrave_text_fee', 99, 1); 
function calculate_engrave_text_fee($cart_object) { 
    foreach ($cart_object->get_cart() as $cart_item) { 
     // Checking that we got the engrave text in cart object 
     if(! empty($cart_item["engrave_text"])) { 

      // Quantity of characters entered into Custom Text Field: 
      $lenght = strlen($cart_item["engrave_text"]); 

      // get the engrave pricing for this product 
      $pricing_engrave = get_post_meta($cart_item['product_id'], '_pricing_engrave_text_option', true); 

      // Characters Entered Multiplied by Cost of Each Letter: 
      $engrave_text_fee = $lenght * $pricing_engrave; 

      // get product price 
      $price = floatval($cart_item['data']->get_price()); 

      // set new price 
      $cart_item['data']->set_price($price + $engrave_text_fee); 
     } 
    } 
} 

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

このコードは動作するはずです

+0

コードを提供してくれてありがとう。私はなぜこのコードを試してみるのか分からないが、バスケットに製品を追加しようとするとすぐに空白になる。私はそれを理解できるかどうかを見極めるつもりです。 – Craig

+1

@craig申し訳ありません$ cart_itemの$値の名前を変更するのを忘れてしまったので、今すぐ動作するはずです...再度試してみてください。 – LoicTheAztec

0

phpタグ<?phpが適切でないようです。それは(あなたには、いくつかのエラーと時代遅れのコードを持っているように)あなたの正しい動的なコードがあるべきよりこの

global $post;  
$engrave_text_fee = $chars * get_post_meta($post->ID,'_pricing_engrave_text_option',true); 
+0

お返事ありがとうございます。私はこれを試してみましたが、ウェブサイトはオンラインに戻ってきましたが、WooCommerceのカスタムフィールドから関連する番号を入力していないようです。あなたの提案されたコードはその番号だけを呼び出しますか、それとも引用符などの中でその番号に電話しますか? – Craig

+0

引用符は使用しないでください。結果は数字になるはずです。ポストメタ値が正しく設定されていることを確認する必要があります。私はそれが何を返すのか試してみることをお勧めします。 'echo $ chars * get_post_meta($ post-> ID、 '_ pricing_engrave_text_option'、true)'を参照してください。 – musashii

関連する問題