Я написал код, состоящий из 6 разделов:
- /1 – Создание полей для каждого купленного билета.
- /2 – Сохранение значений полей.
- /3 – Проверка.
- /4 – Добавление информации на экран благодарности.
- /5 – Отображение информации в электронных письмах.
- /6 – Отображение в серверная часть
Код: Выделить всё
/*1 - Create the fields for each ticket bought*/
add_action( 'woocommerce_before_order_notes', 'person_details' );
function person_details($checkout) {
global $woocommerce;
$count = $woocommerce->cart->cart_contents_count;
$i = 1;
for($k=1; $k 'text',
'class' => array('form-row-wide'),
'label' => __('Full name'),
'placeholder' => __('Enter full name'),
'required'=> true
),
$checkout->get_value( 'cstm_full_name'.$i ));
echo '';
woocommerce_form_field( 'cstm_gender'.$i, array(
'type' => 'radio',
'class' => array('form-row-first validate-required woocommerce-validated'),
'label' => __('Veuillez indiquer votre sexe ?' ),
'options' => array(
'Homme' => __('Homme','plugin-costarica' ),
'Femme' => __('Femme','plugin-costarica' ),
'Autre' => __('Autre','plugin-costarica' ),
),
'required'=> true
),
$checkout->get_value( 'cstm_gender'.$i ));
woocommerce_form_field( 'cstm_partage'.$i, array(
'type' => 'radio',
'class' => array('form-row-last validate-required woocommerce-validated'),
'label' => __('Êtes-vous d\'accord pour partager votre chambre avec un ou plusieurs autres voyageurs ?' ),
'options' => array(
'Oui' => __('Oui','plugin-costarica' ),
'Non' => __('Non','plugin-costarica' ),
),
'required'=> true
),
$checkout->get_value( 'cstm_partage'.$i ));
echo '';
woocommerce_form_field( 'cstm_infos'.$i, array(
'type' => 'textarea',
'class' => array('form-row-wide'),
'label' => __('Préférences alimentaires et informations médicales','plugin-costarica' ),
'placeholder' => __('Merci d\'indiquer aussi précisément que possible votre régime alimentaire et toute information, problèmes et antécédents médicaux qui vous paraissent pertinents pour ce voyage.','plugin-costarica' ),
'required'=> true
),
$checkout->get_value( 'cstm_infos'.$i ));
$i++;}
}
/*2 - 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 = 1;
for($k=1; $kcart->cart_contents_count;
$i = 1;
for($k=1; $kcart->cart_contents_count;
$i = 1;
$message='';
for($k=1; $kget_meta( 'Nom'.$i );
$nom = esc_html($nom);
$gender = $order->get_meta( 'Gender'.$i );
$gender = esc_html($gender);
$partage = $order->get_meta( 'Partage chambre'.$i );
$partage = esc_html($partage);
$infos = $order->get_meta( 'Infos'.$i );
$infos = esc_html($infos);
$message.= '
Nom du voyageur '.$i.'
'.$nom.'
Sexe
'.$gender.'
Partage de chambre
'.$partage.'
Infos additionnelles
'.$infos.'
';
$i++;
} echo $message;
update_post_meta($order_id, 'message_concatenation', sanitize_text_field($message));
}
add_action('woocommerce_thankyou', 'thankyou', 10, 2 );
//5 - Display infos on emails
function modif_email_commande_exempt_tva( $order, $sent_to_admin, $plain_text, $email ) {
$message_email = $order->get_meta( 'message_concatenation' );
if ( $email->id == 'customer_processing_order')
{echo $message_email;}}
add_action( 'woocommerce_email_after_order_table', 'modif_email_commande_exempt_tva', 20, 4 );
//6 - Display in back-end
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){
$message_backend = get_post_meta( $order->get_id(), 'message_concatenation', true );
if(!empty($message_backend)){echo $message_backend;}
}
- Я могу подтвердить заказ даже с обязательными полями пусто.
- Никакая информация не отображается ни в электронном письме, ни в сообщении с благодарностью, ни в серверной части.
Подробнее здесь: https://stackoverflow.com/questions/784 ... and-adding