【发布时间】:2022-01-03 14:16:40
【问题描述】:
很高兴知道: 我根据产品的数量创建了其他字段。因此,如果有人购买了两次产品,他必须在结账时填写两个字段。如果有人购买产品 1x,则必须填写一次。
这些额外的字段包含“选择选项”。我需要在我的订单概览和来自 woocommerce 的电子邮件中获取此元数据。
//Custom WooCommerce Checkout Fields based on Quantity
add_action( 'woocommerce_before_order_notes', 'person_details' );
function person_details($checkout) {
global $woocommerce;
$count = $woocommerce->cart->cart_contents_count;
$i = 0;
for($k=1; $k<= $count; $k++) {
$i++;
print ('Gegevens van kind '.$i.'');
woocommerce_form_field( 'cstm_full_name'.$i, array(
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'label' => __('Volledige naam'),
'placeholder' => __(''),
'required' => true,
),
$checkout->get_value( 'cstm_full_name'.$i ));
echo '<div class="clear"></div>';
woocommerce_form_field( 'cstm_gender', array(
'type' => 'select',
'required' => true,
'class' => array( 'my-field-class form-row-wide' ),
'label' => __( 'Jongen, Meisje of Genderneutraal' ),
'options' => array(
'blank' => __( 'Selecteer', 'njengah' ),
'jongen' => __( 'Jongen', 'njengah' ),
'meisje' => __( 'Meisje', 'njengah' ),
'genderneutraal' => __( 'Genderneutraal', 'njengah' )
)),
$checkout->get_value( 'cstm_gender' ));
woocommerce_form_field( 'cstm_leeftijd'.$i, array(
'type' => 'text',
'class' => array('my-field-class form-row-first'),
'label' => __('Leeftijd bij aanvang kamp'),
'placeholder' => __(''),
'required' => true,
),
$checkout->get_value( 'cstm_leeftijd'.$i ));
woocommerce_form_field( 'cstm_groep'.$i, array(
'type' => 'text',
'class' => array('my-field-class form-row-last'),
'label' => __('In welke huidige Groep'),
'placeholder' => __(''),
'required' => true,
),
$checkout->get_value( 'cstm_groep'.$i ));
woocommerce_form_field( 'cstm_shirt', array(
'type' => 'select',
'required' => true,
'class' => array( 'my-field-class form-row-first' ),
'label' => __( 'Shirt size' ),
'options' => array(
'blank' => __( 'Selecteer', 'njengah' ),
'Maat S' => __( 'S', 'njengah' ),
'Maat M' => __( 'M', 'njengah' ),
'Maat L' => __( 'L', 'njengah' )
)),
$checkout->get_value( 'cstm_shirt' ));
woocommerce_form_field( 'cstm_ervaring', array(
'type' => 'select',
'required' => true,
'class' => array( 'my-field-class form-row-last' ),
'label' => __( 'Summer Camp experience' ),
'options' => array(
'blank' => __( 'Selecteer', 'njengah' ),
'1e keer Summer Camp' => __( '1e keer Summer Camp', 'njengah' ),
'2e keer Summer Camp' => __( '2e keer Summer Camp', 'njengah' ),
'3e keer Summer Camp' => __( '3e keer Summer Camp', 'njengah' ),
'4e keer Summer Camp' => __( '4e keer Summer Camp', 'njengah' )
)),
$checkout->get_value( 'cstm_ervaring' ));
echo '<div class="clearbox"></div>';
}
}
/**
* Save value of fields
*/
add_action('woocommerce_checkout_update_order_meta', 'customise_checkout_field_update_order_meta');
function customise_checkout_field_update_order_meta($order_id)
{
global $woocommerce;
$count = $woocommerce->cart->cart_contents_count;
$i = 0;
for($k=1; $k<= $count; $k++) {
$i++;
if (!empty($_POST['cstm_full_name'.$i])) {
update_post_meta($order_id, 'Naam van kind'.$i, sanitize_text_field($_POST['cstm_full_name'.$i]));
}
if (!empty($_POST['cstm_gender'.$i])) {
update_post_meta($order_id, 'Jongen, Meisje of Genderneutraal'.$i, sanitize_text_field($_POST['cstm_gender'.$i]));
}
if (!empty($_POST['cstm_leeftijd'.$i])) {
update_post_meta($order_id, 'Leeftijd bij aanvang kamp'.$i, sanitize_text_field($_POST['cstm_leeftijd'.$i]));
}
if (!empty($_POST['cstm_groep'.$i])) {
update_post_meta($order_id, 'In welke huidige Groep'.$i, sanitize_text_field($_POST['cstm_groep'.$i]));
}
if ( isset( $_POST['cstm_groep'.$i] )){
$value = sanitize_text_field( $_POST['cstm_groep'.$i] );
update_post_meta( $post->ID, 'cstm_groep'.$i, $value );
}
}
}
/**
* Add fields to order emails
**/
add_filter('woocommerce_email_order_meta_keys', 'my_custom_checkout_field_order_meta_keys');
function my_custom_checkout_field_order_meta_keys( $keys ) {
$i = 0;
for($k=1; $k<= 50; $k++) {
$i++;
$keys[] = 'Naam van kind'.$i;
$keys[] = 'Jongen, Meisje of Genderneutraal'.$i;
$keys[] = 'Leeftijd bij aanvang kamp'.$i;
$keys[] = 'In welke huidige Groep'.$i;
$keys[] = '_cstm_gender'.$i;
$keys[] = '_cstm_shirt'.$i;
$keys[] = '_cstm_ervaring'.$i;
}
return $keys;
}
【问题讨论】:
-
除了回答你的问题:1) 不需要使用
global $woocommerce;。 2) woocommerce_email_order_meta_keys 已弃用。 3) woocommerce_checkout_update_order_meta 可以被一个非常合适的钩子替换,即:woocommerce_checkout_create_order
标签: wordpress woocommerce hook-woocommerce