从WooCommerce中的自定义结账计费字段获取价值

2022-09-03 00:00:00 field php wordpress woocommerce checkout

我在结账时在woocommerce documentation后面添加了一个字段,方法是:

/*Add document ID to checkout form*/
add_filter( 'woocommerce_checkout_fields' , 'ebani_cedula_checkout_field' );

// Our hooked in function - $fields is passed via the filter!
function ebani_cedula_checkout_field( $fields ) {
    $fields['billing']['cedula'] = array(
        'label'     => __('Cédula de ciudadanía', 'woocommerce'),
        'placeholder'   => _x('Cédula', 'placeholder', 'woocommerce'),
        'required'  => true,
        'class'     => array('form-row-last'),
        'clear'     => true,
        'priority' => 15
    );

     return $fields;
}

然后我想这样在管理订单编辑页面上显示它:

/**
 * Display field value on the order edit page
 */
 add_action( 'woocommerce_admin_order_data_after_billing_address', 'cedula_checkout_field_display_admin_order_meta', 10, 1 );
    
 function cedula_checkout_field_display_admin_order_meta($order){
        echo '<p><strong>'.__('Cédula').':</strong> ' . get_post_meta( $order->get_id(), '_cedula', true ) . '</p>';
 }

当我转到订单编辑页面时,我收到_cedula的空值。我不知道为什么,我只是按照文档操作,但它不起作用,我如何获取存储在自定义结账字段中的数据?


解决方案

如果希望在下单时保存此自定义计费字段,最好使用 操作挂钩woocommerce_billing_fields而不是woocommerce_checkout_fields喜欢:

add_filter( 'woocommerce_billing_fields' , 'ebani_cedula_checkout_field' );
function ebani_cedula_checkout_field( $fields ) {
    $fields['billing_cedula'] = array(
        'label'       => __('Cédula de ciudadanía', 'woocommerce'),
        'placeholder' => _x('Cédula', 'placeholder', 'woocommerce'),
        'required'    => true,
        'class'       => array('form-row-last'),
        'clear'       => true,
        'priority'    => 15
    );
    return $fields;
}

add_action( 'woocommerce_admin_order_data_after_billing_address', 'cedula_checkout_field_display_admin_order_meta', 10, 1 );
function cedula_checkout_field_display_admin_order_meta($order){
    if( $value = $order->get_meta('_billing_cedula') )
        echo '<p><strong>'.__('Cédula').':</strong> ' . $value . '</p>';
}

现在,您的自定义结帐单域已保存。

相关文章