Maison  >  Questions et réponses  >  le corps du texte

Le titre réécrit de l'invite d'erreur de vérification de case à cocher personnalisée dans l'enregistrement Woocommerce est : Résoudre le problème de l'invite d'erreur de vérification de case à cocher personnalisée dans l'enregistrement Woocommerce.

<p>Dans WooCommerce, j'ai ajouté une case à cocher personnalisée « Confidentialité » au formulaire d'inscription client en utilisant le code suivant : </p> <pre class="brush:php;toolbar:false;">//Ajouter une case à cocher au formulaire d'inscription add_action( 'woocommerce_register_form', 'add_privacy_checkbox_registration' ); fonction add_privacy_checkbox_registration() { $checkbox_text = sprintf( '%s <a href="%s"><strong>%s</strong></a>', __( 'Я прочитал и согласен с' ), esc_url( site_url('/politic-conf/') ), __( 'politique confidentielle' ) ); ?> <div class="woocommerce-privacy-policy-wrapper"> <p class="form-row validate-required"> <label class="woocommerce-form__label woocommerce-form__label-for-checkbox case à cocher"> <input type="checkbox" class="woocommerce-form__input woocommerce-form__input-checkbox input-checkbox" name="privacy_policy" <?php vérifié (false, true id="privacy); -politique" /> <span class="woocommerce-privacy-policy-checkbox-text"><?php echo $checkbox_text ?></span> ?php esc_attr_e( 'obligatoire', 'woocommerce' ); </étiquette> <type d'entrée="caché" nom="champ-politique" valeur="1" /> </p> </div> <?php } // vérifier add_filter( 'woocommerce_registration_errors', 'privacy_checkbox_registration_validation', 10, 3 ); function Privacy_checkbox_registration_validation( $erreurs ) { si( is_checkout() ) { renvoyer $erreurs ; } if ( vide( $_POST[ 'privacy_policy' ] ) ) { $errors->add( 'privacy_policy_reg_error', 'Vous devez entrer en contact avec la politique de confidentialité.' ); } renvoyer $erreurs ; } ≪/pré> <p>Le code est valide. Case à cocher ajoutée. La logique des cases à cocher fonctionne également. Cela signifie que si vous ne cochez pas la case, l'enregistrement de l'utilisateur ne sera pas possible. </p> <p>Mais il y a un problème. Si la case n'est pas cochée, le texte d'erreur n'apparaît pas à l'écran...</p> <p>Voici la page en question sur mon site - Page à problèmes</p> <p>Des idées ? </p>
P粉318928159P粉318928159429 Il y a quelques jours520

répondre à tous(2)je répondrai

  • P粉464088437

    P粉4640884372023-09-04 11:32:09

    L'avez-vous essayé sans cela ?

    if( is_checkout() ) {
        return $errors;
    }

    Étant donné que le filtre est un filtre enregistré, il semble que ce morceau de code soit inutile car il ne sera pas appelé lors du paiement. Essayez de commenter ce bloc de code et testez à nouveau l'enregistrement. Si cela fonctionne, testez également le processus de paiement pour vous assurer qu'il ne se passe pas mal.

    return $errors;会结束函数,错误不会被添加。当然,我会假设is_checkout() renverra faux lors de l'inscription, mais peut-être que lors de l'inscription, il retournera vrai pour une raison quelconque ?

    Quoi qu’il en soit, ce n’est qu’une tentative.

    répondre
    0
  • P粉231112437

    P粉2311124372023-09-04 10:04:20

    J'ai testé votre code sur un site de test et pour moi ça marche bien, il affiche une erreur lorsque la case est décochée...

    Maintenant, il manque quelque chose dans la dernière fonction, vous avez déclaré 3 paramètres dans la partie add_filter(), il en manque donc 2. En même temps j'ai aussi simplifié votre code

    Voici juste le code modifié pour la dernière fonction :

    // 验证
    add_filter( 'woocommerce_registration_errors', 'privacy_checkbox_registration_validation', 999, 3 );
    function privacy_checkbox_registration_validation( $errors, $username, $email ) {
        // 不在结账页面
        if( ! is_checkout() && empty( $_POST[ 'privacy_policy' ] ) ) {
            $errors->add( 'privacy_policy_error', 'Вам нужно принять политику конфиденциальности.' );
        }
        return $errors;
    }
    

    Maintenant, je ne sais pas si cela résout votre problème car la page se recharge après soumission sur votre site, donc le message d'erreur n'a pas le temps de s'afficher.

    répondre
    0
  • Annulerrépondre