Comment ajouter l'attribut HTML5 'obligatoire' à woocommerce_form_field

Oct 04 2020

Je travaille actuellement sur la page d'inscription WooCommerce dans mon thème WordPress et j'ai ajouté un crochet pour que les utilisateurs acceptent les termes et conditions - voir le code PHP ajouté.

HTML5 fournit une fonctionnalité très utile pour les champs de saisie, qui consiste à ajouter «obligatoire» dans la balise et le nouveau navigateur affichera automatiquement un avertissement. J'ai réussi à faire cela pour tous les autres champs d'entrée, mais je ne peux pas modifier ce tableau PHP spécifique pour afficher la <input>balise avec l' 'required'attribut.

La sortie HTML devrait ressembler à ceci:

<input required type="checkbox" class="input-checkbox woocommerce-form__input woocommerce-form__input-checkbox input-checkbox" name="privacy_policy_reg" id="privacy_policy_reg" value="1">

Cependant, pour le moment, la sortie produite basée sur le code PHP ci-dessous est:

<input type="checkbox" class="input-checkbox woocommerce-form__input woocommerce-form__input-checkbox input-checkbox" name="privacy_policy_reg" id="privacy_policy_reg" value="1">

Remarque: le hook a déjà une vérification de validation PHP mais seulement après avoir appuyé sur le bouton d'enregistrement, tandis que la vérification HTML5 fonctionne instantanément. Néanmoins, je souhaite conserver la vérification de validation PHP au cas où certains navigateurs ne pourraient pas lire la vérification HTML5.

Quelqu'un pourrait-il m'aider avec bonté sur la manière dont le code du tableau PHP devrait être modifié pour que la balise inclue l'attribut «requis»?

J'apprécierais beaucoup toute aide!

Meilleur, David

// CREATE CHECKBOX AND LABEL

add_action( 'woocommerce_register_form', 'bbloomer_add_registration_privacy_policy', 11 );
   
function bbloomer_add_registration_privacy_policy() {
 
woocommerce_form_field( 'privacy_policy_reg', array(
   'type'          => 'checkbox',
   'class'         => array('form-row privacy'),
   'label_class'   => array('woocommerce-form__label woocommerce-form__label-for-checkbox checkbox'),
   'input_class'   => array('woocommerce-form__input woocommerce-form__input-checkbox input-checkbox'),
   'required'      => true,
   'label'         => 'I\'ve read and accept the <a href="/privacy-policy">Privacy Policy</a>',
));
  
}
  
// SHOW ERROR AFTER CLICKING SUBMIT BUTTON IF USER HAS NOT CHECKED CHECKBOX
   
add_filter( 'woocommerce_registration_errors', 'bbloomer_validate_privacy_registration', 10, 3 );
  
function bbloomer_validate_privacy_registration( $errors, $username, $email ) { if ( ! is_checkout() ) { if ( ! (int) isset( $_POST['privacy_policy_reg'] ) ) {
        $errors->add( 'privacy_policy_reg_error', __( 'Privacy Policy consent is required!', 'woocommerce' ) ); } } return $errors;
}

METTRE À JOUR

  1. Comme pour une autre question ici: Comment puis-je rendre la valeur du champ personnalisé requise (obligatoire) dans la page du produit woocommerce lors de l'ajout d'un produit que j'ai déjà essayé (sans succès):
'custom_attributes' => array( 'required' => 'required' ),
  1. Selon les suggestions, j'ai déjà essayé:
required => "required"

required => "required"

Réponses

3 7uc1f3r Oct 04 2020 at 05:38

Si vous souhaitez réellement passer <input..à, <input required..vous pouvez ajouter le woocommerce_form_field_checkboxcrochet de filtre.

Le fait est que là où le code HTML est créé

(Ce code a été copié de la wc-template-functions.phpligne 2799)

<input type="' . esc_attr( $args['type'] ) . '" class="input-checkbox ' . esc_attr( implode( ' ', $args['input_class'] ) ) . '" name="' . esc_attr( $key ) . '" id="' . esc_attr( $args['id'] ) . '" value="1" ' . checked( $value, 1, false ) . ' /> ' . $args['label'] . $required . '</label>';

l'option existe pour ajouter des arguments au code existant $argsmais pas supplémentaire au HTMLcode HTMLlui - même


Donc, si vous ajoutez le code ci-dessous à votre code existant, vous avez la possibilité d'ajuster la HTMLsortie du$field

  • str_replace - Remplace toutes les occurrences de la chaîne de recherche par la chaîne de remplacement
function filter_woocommerce_form_field_checkbox( $field, $key, $args, $value ) { // Based on key if ( $key == 'privacy_policy_reg' ) {
        $field = str_replace( '<input', '<input required', $field );
    }
    
    return $field;
}
add_filter( 'woocommerce_form_field_checkbox', 'filter_woocommerce_form_field_checkbox', 10, 4 );

En relation: Comment changer la structure HTML de woocommerce_form_field?