2016-09-21 4 views
0

私のチェックアウトページに新しいセクションを作成し、ユーザーから重要な情報を収集し、この情報を私たちのオーダーに送信される標準の電子メールに追加する必要があります達成チーム。用テンプレートフックページ内するとwoocommerce_form_field()は指定したフィールドをレンダリングしません

<div class="col2-set group"> 
    <div class="col col-1"> 
    <?php do_action('ni_card_form') ?> 
    </div> 
</div> 

まず、私はそうのようにチェックアウトフォームページ内で自分のフックを作成します。ここでは

は私がしようとしてるものですチェックアウトページ私はページに作成したテンプレートをレンダリングするこのフックに関数をドロップします:

フックによって呼び出される関数。

function render_card_form() { 
    echo ' 
    <div class="group postpaid-card"> 
    <h3>PostPaid Recurring Billing</h3> 
    <div class="my-input-field"> 
     <small class="card-type"></small> 
     ' . 
     woocommerce_form_field('c_card', array(
      'type' => 'text', 
      'class' => array('c_card', 'input-text'), 
      'label' => __('Card Number:'), 
      'placeholder' => "XA-12-3456-7817", 
      'required' => true 
     )) 
     . ' 
     <p class="c-error"></p> 
    </div> 
    <div class="my-input-field"> 
     <div class="col2-set group"> 
     <div class="col c-half c-first"> 
      ' . 
      woocommerce_form_field('c_date', array(
       'type' => 'text', 
       'class' => array('c_date', 'input-text'), 
       'label' => __('Exp. Date:'), 
       'placeholder' => "MM/YY", 
       'required' => true 
      )) 
      . ' 
     </div> 
    </div> 
    </div>'; 

} 

通常のHTML入力フィールドでwooCommerce関数を置き換えると、適切な場所にレンダリングされます。しかし、それらのフィールドを作成するためにそれらのwooCommerce関数を使用しているので、動作しません。代わりに、これらのフィールドをページの別のセクションに追加します。

どうしてですか?

oneのようなチュートリアルを見てから、それらの入力をHTML内でレンダリングすることが可能であるようです。確かに、彼はフックを使ってテンプレートをどこかに置いていますが(ノートの後ろ)、テンプレートを全体としてレンダリングしているので、入力を別の場所に描画しません。

どうしてですか?

答えて

0

答えはテンプレート関数内にあります。文字列に関数を追加することはできません。私は各エコーを終了し、woocommercieフィールド関数を呼び出して、適切にテンプレートを構築するために新しいエコーを開始する必要があります。例えば

echo '<div id="my_custom_checkout_field"><h2>' . __('My Field') . '</h2>'; 

woocommerce_form_field('my_field_name', array(
    'type'   => 'text', 
    'class'   => array('my-field-class form-row-wide'), 
    'label'   => __('Fill in this field'), 
    'placeholder' => __('Enter something'), 
    ), $checkout->get_value('my_field_name')); 

echo '</div>'; 

構造がここに文字通りです:

エコー '';

woocomm関数;

echo '';

これで機能します。

関連する問題