在 woocommerce 中管理自定义结帐字段

Manage custom checkout fields in woocommerce

您好,我有一个关于 woocommerce 中的自定义结帐字段的问题。 我在结帐表单中创建了一个自定义字段,一切正常。该字段包含客户卡号。我还设法在 wp-usermeta 中保存字段值(一旦第一次输入),这样它就不会只随订单一起出现,而是与客户详细信息一起保存。

现在我想做以下事情。一旦返回商店的注册客户转到结帐表格,新字段(如果不是空的)会自动显示,而不是每次都要求客户输入他们的卡号。

我添加到我的子主题 fucntions.php 中用于在结帐页面中显示自定义字段的原始功能是:

  /**
 * Add the field to the checkout
 */
add_action ('woocommerce_after_order_notes', 'checkout_w55_card_number' );

  function checkout_w55_card_number( $checkout ) {

      echo '<div id="checkout_w55_card_number"><h2>' . __('N. tessera W55') . '</h2>';

      woocommerce_form_field( 'w55_card_number', array(
          'type'          => 'text',
          'class'         => array('w55-card-number-class form-row-wide'),
          'label'         => __('Inserisci n. tessera W55'),
          'placeholder'   => __('Inserisci numero'),
          ), $checkout->get_value( 'w55_card_number' ));
      echo '</div>';
}

因此我尝试重新排列它,但它不起作用

add_action ('woocommerce_after_order_notes', 'checkout_w55_card_number' );

function checkout_w55_card_number( $checkout ) {
//extracts the value of the w55_card_number field
$w55_card = get_user_meta($user_id, 'w55_card_number', true);
//condition is the w55_card_number field is empty or not 
if ( !empty($w55_card) ) : echo $w55_card;      else :

          echo '<div id="checkout_w55_card_number"><h2>' . __('N. tessera W55') . '</h2>';

          woocommerce_form_field( 'w55_card_number', array(
              'type'          => 'text',
              'class'         => array('w55-card-number-class form-row-wide'),
              'label'         => __('Inserisci n. tessera W55'),
              'placeholder'   => __('Inserisci numero'),
              ), $checkout->get_value( 'w55_card_number' ));
          echo '</div>';
         endif;
   }

有什么建议吗?

您的 user_id 变量未定义。您需要执行以下操作:

add_action ('woocommerce_after_order_notes', 'checkout_w55_card_number' );

function checkout_w55_card_number( $checkout ) {
    $user_id = get_current_user_id();
    $w55_card = '';
    if ($user_id) {
         //extracts the value of the w55_card_number field
         $w55_card = get_user_meta($user_id, 'w55_card_number', true);
    }
    //condition is the w55_card_number field is empty or not 
    if ( !empty($w55_card) ) : echo $w55_card;      
    else :
      echo '<div id="checkout_w55_card_number"><h2>' . __('N. tessera W55') . '</h2>';
      woocommerce_form_field( 'w55_card_number', array(
          'type'          => 'text',
          'class'         => array('w55-card-number-class form-row-wide'),
          'label'         => __('Inserisci n. tessera W55'),
          'placeholder'   => __('Inserisci numero'),
          ), $checkout->get_value( 'w55_card_number' ));
      echo '</div>';
     endif;

}