Прежде всего, нет необходимости использовать один и тот же хук снова и снова для каждого дополнительного поля
Здесь и там у вас также есть опечатки , заглавными буквами , где в противном случае вы используете строчные буквы или другое имя
/**
* Add fields to the checkout
*/
function my_custom_checkout_fields( $checkout ) {
// domaine
woocommerce_form_field( 'domaine', array(
'type' => 'select',
'class' => array('domaine form-row-wide'),
'label' => __('Dans quel domaine se situe votre question ?'),
'required' => true,
'options' => array(
'famille' => __('Famille'),
'immobilier' => __('Immobilier'),
'vie_pro' => __('Vie professionnelle'),
'fiscalité' => __('Fiscalité'),
'droit_des_societes' => __('Droit des sociétés'),
'autre' => __('Autre')
),
'default' => 'famille'
), $checkout->get_value( 'domaine' ));
// question
woocommerce_form_field( 'question', array(
'type' => 'textarea',
'class' => array('my-field-class form-row-wide'),
'required' => true,
'label' => __('Merci de décrire le plus précisément possible votre demande et vos questions'),
'placeholder' => __('...'),
), $checkout->get_value( 'question' ));
// recherches
woocommerce_form_field( 'recherches', array(
'type' => 'radio',
'class' => array('recherche-field form-row-wide'),
'label' => __('Avez-vous déjà effectué des recherches ?'),
'required' => true,
'options' => array(
'oui' => __('Oui'),
'non' => __('Non'),
),
), $checkout->get_value( 'recherches' ));
// professionnel
woocommerce_form_field( 'professionnel', array(
'type' => 'radio',
'class' => array('recherche-field form-row-wide'),
'label' => __('Avez-vous déjà consulté un professionnel du droit ou de la réglementation ?'),
'required' => true,
'options' => array(
'oui' => __('Oui'),
'non' => __('Non'),
),
), $checkout->get_value( 'professionnel' ));
// statut
woocommerce_form_field( 'statut', array(
'type' => 'radio',
'class' => array('recherche-field form-row-wide'),
'label' => __('Vous êtes ?'),
'required' => true,
'options' => array(
'particulier' => __('Particulier'),
'entreprise' => __('Entreprise'),
'collectivite' => __('Collectivité')
),
), $checkout->get_value( 'statut' ));
}
add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_fields', 10, 1 );
/**
* Process the checkout
*/
function my_custom_checkout_field_process() {
// Validation, 'domaine' is not added because it has a default value
// question
if ( empty( $_POST['question'] ) ) {
wc_add_notice( __( 'Merci de poser votre question.' ), 'error' );
}
// recherches
if ( empty( $_POST['recherches'] ) ) {
wc_add_notice( __( 'Merci de renseigner si vous avez déjà effectué des recherches.' ), 'error' );
}
// professionnel
if ( empty( $_POST['professionnel'] ) ) {
wc_add_notice( __( 'Merci de renseigner si vous avez déjà contacté un professionnel.' ), 'error' );
}
// statut
if ( empty ( $_POST['statut'] ) ) {
wc_add_notice( __( 'Merci de renseigner votre statut.' ), 'error' );
}
}
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process' );
/**
* Update the order meta with field value
*/
function my_custom_checkout_field_update_order_meta_domaine( $order_id ) {
if ( ! empty( $_POST['domaine'] ) ) {
update_post_meta( $order_id, 'domaine', sanitize_text_field( $_POST['domaine'] ) );
}
if ( ! empty( $_POST['question'] ) ) {
update_post_meta( $order_id, 'question', sanitize_text_field( $_POST['question'] ) );
}
if ( ! empty( $_POST['recherches'] ) ) {
update_post_meta( $order_id, 'recherches', sanitize_text_field( $_POST['recherches'] ) );
}
if ( ! empty( $_POST['professionnel'] ) ) {
update_post_meta( $order_id, 'professionnel', sanitize_text_field( $_POST['professionnel'] ) );
}
if ( ! empty( $_POST['statut'] ) ) {
update_post_meta( $order_id, 'statut', sanitize_text_field( $_POST['statut'] ) );
}
}
add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta_domaine', 10, 1 );
/**
* Display field value on the order edit page
*/
function my_custom_checkout_field_display_admin_order_meta_domaine( $order ) {
// Get order id
$order_id = $order->get_id();
echo '<p><strong>'.__('domaine').':</strong> ' . get_post_meta( $order_id, 'domaine', true ) . '</p>';
echo '<p><strong>'.__('question').':</strong> ' . get_post_meta( $order_id, 'question', true ) . '</p>';
echo '<p><strong>'.__('recherches').':</strong> ' . get_post_meta( $order_id, 'recherches', true ) . '</p>';
echo '<p><strong>'.__('Contact avec un professionnel').':</strong> ' . get_post_meta( $order_id, 'professionnel', true ) . '</p>';
echo '<p><strong>'.__('statut').':</strong> ' . get_post_meta( $order_id, 'statut', true ) . '</p>';
}
add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta_domaine', 10, 1 );
Дополнительно: Чтобы избежать добавления оператора if
каждый раз, вы можете использовать foreach
l oop вместо
Так это
/**
* Update the order meta with field value
*/
function my_custom_checkout_field_update_order_meta_domaine( $order_id ) {
if ( ! empty( $_POST['domaine'] ) ) {
update_post_meta( $order_id, 'domaine', sanitize_text_field( $_POST['domaine'] ) );
}
if ( ! empty( $_POST['question'] ) ) {
update_post_meta( $order_id, 'question', sanitize_text_field( $_POST['question'] ) );
}
if ( ! empty( $_POST['recherches'] ) ) {
update_post_meta( $order_id, 'recherches', sanitize_text_field( $_POST['recherches'] ) );
}
if ( ! empty( $_POST['professionnel'] ) ) {
update_post_meta( $order_id, 'professionnel', sanitize_text_field( $_POST['professionnel'] ) );
}
if ( ! empty( $_POST['statut'] ) ) {
update_post_meta( $order_id, 'statut', sanitize_text_field( $_POST['statut'] ) );
}
}
add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta_domaine', 10, 1 );
Таким образом, это также возможно
/**
* Update the order meta with field value
*/
function my_custom_checkout_field_update_order_meta_domaine( $order_id ) {
// Add fields
$fields = array('domaine', 'question', 'recherches', 'professionnel', 'statut');
// Loop
foreach ( $fields as $field ) {
$field_post = $_POST[$field];
if ( ! empty( $field_post ) ) {
update_post_meta( $order_id, $field, sanitize_text_field( $field_post ) );
}
}
}
add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta_domaine', 10, 1 );