【发布时间】:2021-05-12 04:31:15
【问题描述】:
我正在寻找一些 php 代码,可以让我从结帐字段中提取信息(姓名、地址等)并将其添加到订单元数据中。
希望这个尽可能简单
我之前发现此代码允许将自定义框添加到结帐页面,并且我有点理解它的工作原理,但是我想在他们将其输入计费名字框时捕获他们的名字。我似乎可以掌握如何捕获这些数据并将其放入订单元数据中,我尝试缩短代码并对其进行几次编辑,但我似乎没有获胜
// Our hooked in function - $fields is passed via the filter!
function custom_override_checkout_fields( $fields ) {
$fields['shipping']['shipping_phone'] = array(
'label' => __('Phone', 'woocommerce'),
'placeholder' => _x('Phone', 'placeholder', 'woocommerce'),
'required' => false,
'class' => array('form-row-wide'),
'clear' => true
);
return $fields;
}
/**
* Display field value on the order edit page
*/
add_action( 'woocommerce_admin_order_data_after_shipping_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );
function my_custom_checkout_field_display_admin_order_meta($order){
echo '<p><strong>'.__('Phone From Checkout Form').':</strong> ' . get_post_meta( $order->get_id(), '_shipping_phone', true ) . '</p>';
}
/**
* Add the field to the checkout
*/
add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field' );
function my_custom_checkout_field( $checkout ) {
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>';
}
/**
* Process the checkout
*/
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
// Check if set, if its not set add an error.
if ( ! $_POST['my_field_name'] )
wc_add_notice( __( 'Please enter something into this new shiny field.' ), 'error' );
}
/**
* Update the order meta with field value
*/
add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta' );
function my_custom_checkout_field_update_order_meta( $order_id ) {
if ( ! empty( $_POST['my_field_name'] ) ) {
update_post_meta( $order_id, 'My Field', sanitize_text_field( $_POST['my_field_name'] ) );
}
}
我喜欢这个,它确实有效,但不是以我需要的方式工作。感谢您的所有帮助
【问题讨论】:
-
/** * 使用字段值更新订单元数据 */ add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta' );功能 my_custom_checkout_field_update_order_meta( $order_id ) { if ( !empty( $field[billing_first_name] ) ) { update_post_meta( $order_id, 'start_date_', sanitize_text_field( $field[billing_first_name] ) );这是我创建的代码,我希望将帐单名称复制到订单元数据中
-
嗨,为了澄清,我尝试创建一些代码,将计费名字的值添加到订单元数据中,但是我的代码似乎不起作用,我不明白为什么
标签: php wordpress woocommerce metadata orders