woocommerce_form_field() 不在我指定的位置呈现字段

woocommerce_form_field() doesn't render field where I specify

我需要在我的结账页面上创建一个全新的部分并从用户那里收集一些重要信息,然后将此信息添加到发送给我们的订单执行团队的标准电子邮件中。

这是我正在尝试做的事情:

首先,我在结帐表单页面中创建了一个自己的挂钩,如下所示:

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

然后在结帐页面的模板挂钩页面中,我将一个函数放入此挂钩中,它将呈现我创建的模板到页面:

add_action( 'ni_card_form', 'render_card_form' );

然后是钩子调用的函数

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 中呈现这些输入,他正在回显。当然,他使用钩子将模板放置在某个地方(在注释之后),但它仍然呈现整个模板,而不是在其他地方呈现输入。

为什么会发生这种情况?

答案就在模板函数中。我无法将函数添加到字符串中。我必须结束每个 echo,调用 woocommercie 字段函数,然后开始一个新的 echo 才能正确构建模板。

例如:

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>';

这里的结构字面意思是:

echo '<some html code>';

woocomm function;

echo '</some html code>';

现在可以了。