Rendre des champs non obligatoire dans Checkout (Créer un compte)

  • WordPress :5.4
  • Statut : hors support
14 sujets de 1 à 14 (sur un total de 14)
  • Auteur
    Messages
  • #2352843
    que
    Participant
    Padawan WordPress
    77 contributions

    Ma configuration WP actuelle :
    – Version de WordPress : 5.5
    – Version de PHP/MySQL : 7.3.19-1~deb10u1 / 5.5.5
    – Thème utilisé : Mon thème enfant
    – Extensions en place : Advanced Order Export For WooCommerce (3.1.4), Akismet Anti-Spam (4.1.6), Booster for WooCommerce (5.2.0), Caldera Forms (1.9.2), Checkout Field Editor for WooCommerce (1.4.3), Easy WP SMTP (1.4.1), Elementor (2.9.14), Forum_wordpress_fr (4.2), Google Analytics Dashboard for WP (GADWP) (6.2.2), Google Analytics for WordPress by MonsterInsights (7.12.2), Head, Footer and Post Injections (3.2.1), Hello Dolly (1.7.2), Hide Related Products in WooCommerce (1.0), Insert PHP Code Snippet (1.3.1), More Sorting Options for WooCommerce (3.2.4), Ninja Forms (3.4.25), PHP Code Widget (2.3), PHP Everywhere (2.0.2), Starter Templates (2.3.4), Tracking code for Matomo, by Sergio Santos (1.1.3), WooCommerce (4.3.3), WooCommerce – Store Exporter (2.6), WooCommerce Admin (1.3.2), WooCommerce Blocks (3.1.0), Woocommerce Cart Limit (1.2), WooCommerce Piwik integration (2.1.4), WP-Members (3.3.5.1), WPForms Lite (1.6.2.2), WPFront Notification Bar (1.7.1), WP phpMyAdmin (3.03), XT WooCommerce Floating Cart (1.7.2)
    – Adresse du site : https://wp.test.stephane.couanouz.net
    – Nom de l’hébergeur : nginx/1.14.2

     

    Bonjour,

    Dans la partie CHECKOUT j’ai enlevé toutes les informations, donc je n’ai plus d’informations de DETAILS DE FACTURATION et je n’ai plus d’INFORMATIONS COMPLEMENTAIRE. J’ai seulement les informations concernant les produits achetés.

    Mais quand je passe la commande et que je clique sur COMMANDER j’ai un message d’erreur m’indiquant que les champs suivants sont obligatoires : Address 1 est obligatoire, Etat est obligatoire, Zip est obligatoire, Country est obligatoire, Téléphone est obligatoire

    J’ai installé Checkout Field Editor for WooCommerce  pour essayer de résoudre le pb mais ça ne fonctionne pas.

    J’ai aussi utilisé le code ci dessous dans mon thème enfant mais j’ai toujours ces message d’erreur :

    /**
    * Load deprecated functions
    */
    add_filter( ‘woocommerce_checkout_fields’ , ‘custom_override_checkout_fields’ );
    function custom_override_checkout_fields( $fields ) {
    unset($fields[‘billing’][‘billing_postcode’]);
    unset($fields[‘billing’][‘billing_country’]);
    unset($fields[‘billing’][‘billing_first_name’]);
    unset($fields[‘billing’][‘billing_state’]);
    unset($fields[‘billing’][‘billing_phone’]);
    unset($fields[‘order’][‘order_comments’]);
    unset($fields[‘billing’][‘billing_address_2’]);
    unset($fields[‘billing’][‘billing_address_1’]);
    unset($fields[‘billing’][‘billing_state’]);
    unset($fields[‘billing’][‘billing_company’]);
    unset($fields[‘billing’][‘billing_last_name’]);
    unset($fields[‘billing’][‘billing_email’]);
    unset($fields[‘billing’][‘billing_city’]);

    return $fields;
    }

    /* Make billing fields not required in checkout */
    add_filter( ‘woocommerce_billing_fields’, ‘wc_npr_filter_billing_fields’, 10, 1 );
    function wc_npr_filter_billing_fields( $address_fields ) {
    $address_fields[‘billing_first_name’][‘required’] = false;
    $address_fields[‘billing_last_name’][‘required’] = false;
    $address_fields[‘billing_company’][‘required’] = false;
    $address_fields[‘billing_address_1’][‘required’] = false;
    $address_fields[‘billing_address_2’][‘required’] = false;
    $address_fields[‘billing_phone’][‘required’] = false;
    $address_fields[‘billing_city’][‘required’] = false;
    $address_fields[‘billing_postcode’][‘required’] = false;
    $address_fields[‘billing_state’][‘required’] = false;
    $address_fields[‘billing_country’][‘required’] = false;
    $address_fields[‘billing_phone’][‘required’] = false;
    return $address_fields;
    }

    /* Make shipping fields not required in checkout */
    add_filter( ‘woocommerce_shipping_fields’, ‘wc_npr_filter_shipping_fields’, 10, 1 );
    function wc_npr_filter_shipping_fields( $address_fields ) {
    $address_fields[‘shipping_first_name’][‘required’] = false;
    $address_fields[‘shipping_last_name’][‘required’] = false;
    $address_fields[‘shipping_company’][‘required’] = false;
    $address_fields[‘shipping_address_1’][‘required’] = false;
    $address_fields[‘shipping_address_2’][‘required’] = false;
    $address_fields[‘shipping_phone’][‘required’] = false;
    $address_fields[‘shipping_city’][‘required’] = false;
    $address_fields[‘shipping_postcode’][‘required’] = false;
    $address_fields[‘shipping_state’][‘required’] = false;
    $address_fields[‘shipping_country’][‘required’] = false;
    $address_fields[‘shipping_phone’][‘required’] = false;
    return $address_fields;
    }

    Pouvez vous m’aider ?

    Je vous remercie.

    #2352872
    ferman
    Participant
    Maître WordPress
    2815 contributions

    Bonjour,

    Essayez ces deux fonctions: elles devraient enlever ce que vous souhaitez. On les trouve ICI et LA

    add_filter( 'woocommerce_default_address_fields' , 'custom_override_default_address_fields' );
    
    // Our hooked in function - $address_fields is passed via the filter!
    function custom_override_default_address_fields( $address_fields ) {
         $address_fields['address_1']['required'] = false;
    	$address_fields['postcode']['required'] = false;
    	$address_fields['state']['required'] = false;
    	$address_fields['country']['required'] = false;
    	$address_fields['billing_phone']['required'] = false;
         return $address_fields;
    }
    
    add_filter( 'woocommerce_billing_fields', 'ts_unrequire_wc_phone_field');
    function ts_unrequire_wc_phone_field( $fields ) {
    	$fields['billing_phone']['required'] = false;
    	return $fields;
    }

    #2352875
    que
    Participant
    Padawan WordPress
    77 contributions

    Bonjour,

    Je te remercie pour ton retour.

    Une derniere question, est ce qu’il faut que je mette ce code dans le fichier functions.php de mon thème parent ??

    Merci.

    #2352883
    ferman
    Participant
    Maître WordPress
    2815 contributions

    Bonjour,

    Une derniere question, est ce qu’il faut que je mette ce code dans le fichier functions.php de mon thème parent ??

    Oui. C’est comme ça que j’ai testé le code.

    #2352889
    que
    Participant
    Padawan WordPress
    77 contributions

    Merci pour ton retour. J’ai ajouté ton code à ma page functions de mon thème mais cela ne fonctionne pas.

    Voici l’intégralité du code de cette page. Peut etre qu’il y a des erreurs ?

    Merci pour ton aide.
    <div></div>
    <div>/**</div>
    <div> * Load deprecated functions</div>
    <div>*/</div>
    <div>add_filter( ‘woocommerce_checkout_fields’ , ‘custom_override_checkout_fields’ );</div>
    <div>function custom_override_checkout_fields( $fields ) {</div>
    <div>unset($fields[‘billing’][‘billing_postcode’]);</div>
    <div>unset($fields[‘billing’][‘billing_country’]);</div>
    <div>unset($fields[‘billing’][‘billing_first_name’]);</div>
    <div>unset($fields[‘billing’][‘billing_state’]);</div>
    <div>unset($fields[‘billing’][‘billing_phone’]);</div>
    <div>unset($fields[‘order’][‘order_comments’]);</div>
    <div>unset($fields[‘billing’][‘billing_address_2’]);</div>
    <div>unset($fields[‘billing’][‘billing_address_1’]);</div>
    <div>unset($fields[‘billing’][‘billing_state’]);</div>
    <div>unset($fields[‘billing’][‘billing_company’]);</div>
    <div>unset($fields[‘billing’][‘billing_last_name’]);</div>
    <div>unset($fields[‘billing’][‘billing_email’]);</div>
    <div>unset($fields[‘billing’][‘billing_city’]);</div>
    <div></div>
    <div>return $fields;</div>
    <div>}</div>
    <div></div>
    <div></div>
    <div>/* Make billing fields not required in checkout */</div>
    <div>add_filter( ‘woocommerce_billing_fields’, ‘wc_npr_filter_billing_fields’, 10, 1 );</div>
    <div>function wc_npr_filter_billing_fields( $address_fields ) {</div>
    <div>$address_fields[‘billing_first_name’][‘required’] = false;</div>
    <div>$address_fields[‘billing_last_name’][‘required’] = false;</div>
    <div>$address_fields[‘billing_company’][‘required’] = false;</div>
    <div>$address_fields[‘billing_address_1’][‘required’] = false;</div>
    <div>$address_fields[‘billing_address_2’][‘required’] = false;</div>
    <div>$address_fields[‘billing_phone’][‘required’] = false;</div>
    <div>$address_fields[‘billing_city’][‘required’] = false;</div>
    <div>$address_fields[‘billing_postcode’][‘required’] = false;</div>
    <div>$address_fields[‘billing_state’][‘required’] = false;</div>
    <div>$address_fields[‘billing_country’][‘required’] = false;</div>
    <div>$address_fields[‘billing_phone’][‘required’] = false;</div>
    <div>return $address_fields;</div>
    <div>}</div>
    <div></div>
    <div>/* Make shipping fields not required in checkout */</div>
    <div>add_filter( ‘woocommerce_shipping_fields’, ‘wc_npr_filter_shipping_fields’, 10, 1 );</div>
    <div>function wc_npr_filter_shipping_fields( $address_fields ) {</div>
    <div>$address_fields[‘shipping_first_name’][‘required’] = false;</div>
    <div>$address_fields[‘shipping_last_name’][‘required’] = false;</div>
    <div>$address_fields[‘shipping_company’][‘required’] = false;</div>
    <div>$address_fields[‘shipping_address_1’][‘required’] = false;</div>
    <div>$address_fields[‘shipping_address_2’][‘required’] = false;</div>
    <div>$address_fields[‘shipping_phone’][‘required’] = false;</div>
    <div>$address_fields[‘shipping_city’][‘required’] = false;</div>
    <div>$address_fields[‘shipping_postcode’][‘required’] = false;</div>
    <div>$address_fields[‘shipping_state’][‘required’] = false;</div>
    <div>$address_fields[‘shipping_country’][‘required’] = false;</div>
    <div>$address_fields[‘shipping_phone’][‘required’] = false;</div>
    <div>return $address_fields;</div>
    <div>}</div>
    <div></div>
    <div>add_filter( ‘woocommerce_default_address_fields’ , ‘custom_override_default_address_fields’ );</div>
    <div></div>
    <div>// Our hooked in function – $address_fields is passed via the filter!</div>
    <div>function custom_override_default_address_fields( $address_fields ) {</div>
    <div>     $address_fields[‘address_1’][‘required’] = false;</div>
    <div>$address_fields[‘postcode’][‘required’] = false;</div>
    <div>$address_fields[‘state’][‘required’] = false;</div>
    <div>$address_fields[‘country’][‘required’] = false;</div>
    <div>$address_fields[‘billing_phone’][‘required’] = false;</div>
    <div>     return $address_fields;</div>
    <div>}</div>
    <div></div>
    <div>add_filter( ‘woocommerce_billing_fields’, ‘ts_unrequire_wc_phone_field’);</div>
    <div>function ts_unrequire_wc_phone_field( $fields ) {</div>
    <div>$fields[‘billing_phone’][‘required’] = false;</div>
    <div>return $fields;</div>
    <div>}</div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>

    #2352905
    ferman
    Participant
    Maître WordPress
    2815 contributions

    Vous avez plusieurs fois des fonctions analogues  et peut être des erreurs. Sauvegardez ce que vous avez mis dans votre function.php concernant la page “checkout”et remplacez par ce que je vous donne ci dessous. Il y a deux types de fonctions. La première supprime les champs. Si vous voulez supprimer ce qui a à voir avec la facturation (la colonne de gauche dans la page” checkout”

    ) il faut faire, par exemple pour le nom, “unset($fields[‘billing’][‘billing_last_name’]);”. Si vos voulez supprimer ce qui concerne la livraison (colonne droite), il faut faire unset($fields[‘shipping’][‘shipping_last_name’]);, comme dans les deux dernières lignes de la première fonction que je joins.

    Si vous voulez simplement rendre les champs facultatifs, ce sont des deux dernières fonctions. Bien sûr si vous avez fait “unset” pour un champ, il ne peut pas être facultatif.

    En conclusion: si vous voulez simplement rendre les champs non obligatoires comme vous le dites dans le titre du sujet et non les supprimer, il ne faut pas utiliser la première fonction mais seulement une des deux autres.

    Avec  ces trois fonctions et la doc que je vous avais passée en lien (et que vous connaissiez déjà je crois), vous pouvez organiser votre page “checkout” comme vous voulez.

    
    // Cette fonction supprime les champs.
         add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
    function custom_override_checkout_fields( $fields ) {
    unset($fields['billing']['billing_postcode']);
    unset($fields['billing']['billing_country']);
    unset($fields['billing']['billing_first_name']);
    unset($fields['billing']['billing_state']);
    unset($fields['billing']['billing_phone']);
    unset($fields['order']['order_comments']);
    unset($fields['billing']['billing_address_2']);
    unset($fields['billing']['billing_address_1']);
    unset($fields['billing']['billing_state']);
    unset($fields['billing']['billing_company']);
    unset($fields['billing']['billing_last_name']);
    unset($fields['billing']['billing_email']);
    unset($fields['billing']['billing_city']);
    
    unset($fields['shipping']['shipping_address_1']);
    unset($fields['shipping']['shipping_country']);
         return $fields;
    }
    
    add_filter( 'woocommerce_default_address_fields' , 'custom_override_default_address_fields' );
    
    // ces deux fonctions rendent les champs facultatifs mais ne les suppriment pas.
    function custom_override_default_address_fields( $address_fields ) {
        $address_fields['address_1']['required'] = false;
    	$address_fields['postcode']['required'] = false;
    	$address_fields['state']['required'] = false;
    	$address_fields['country']['required'] = false;
    	$address_fields['billing_phone']['required'] = false;
         return $address_fields;
    }
    
    add_filter( 'woocommerce_billing_fields', 'ts_unrequire_wc_phone_field');
    function ts_unrequire_wc_phone_field( $fields ) {
    	$fields['billing_phone']['required'] = false;
    	return $fields;
    }

    • Cette réponse a été modifiée le il y a 1 semaine et 1 jour par ferman.
    • Cette réponse a été modifiée le il y a 1 semaine et 1 jour par ferman.
    #2352943
    que
    Participant
    Padawan WordPress
    77 contributions

    Encore moi,

    J’ai encore les champs suivants qui sont en obligatoire :

    Address 1 est obligatoire.

    Ville est obligatoire.

    Zip est obligatoire.

    Country est obligatoire.

    Téléphone est obligatoire.

    Pourtant j’ai modifié votre code et j’ai mis le code suivant dans le fichier functions de mon thème parent
    add_filter( ‘woocommerce_default_address_fields’ , ‘custom_override_default_address_fields’ );

    // ces deux fonctions rendent les champs facultatifs mais ne les suppriment pas.
    function custom_override_default_address_fields( $address_fields ) {
    $address_fields[‘city’][‘required’] = false;
    $address_fields[‘address_1’][‘required’] = false;
    $address_fields[‘postcode’][‘required’] = false;
    $address_fields[‘state’][‘required’] = false;
    $address_fields[‘country’][‘required’] = false;
    $address_fields[‘phone’][‘required’] = false;
    return $address_fields;
    }

    add_filter( ‘woocommerce_billing_fields’, ‘ts_unrequire_wc_phone_field’);
    function ts_unrequire_wc_phone_field( $fields ) {
    $fields[‘billing_city’][‘required’] = false;
    $fields[‘billing_address_1’][‘required’] = false;
    $fields[‘billing_postcode’][‘required’] = false;
    $fields[‘billing_state’][‘required’] = false;
    $fields[‘billing_country’][‘required’] = false;
    $fields[‘billing_phone’][‘required’] = false;
    return $fields;
    }

    • Cette réponse a été modifiée le il y a 1 semaine par que.
    #2352949
    ferman
    Participant
    Maître WordPress
    2815 contributions

    C’est de ma faute, j’ai mis le commentaire // ces deux fonctions rendent les champs facultatifs mais ne les suppriment pas une ligne trop bas si bien que le filtre était exclu. Voilà c’est réparé.

     

    // ces deux fonctions rendent les champs facultatifs mais ne les suppriment pas.
    
    add_filter( 'woocommerce_default_address_fields' , 'custom_override_default_address_fields' );
    function custom_override_default_address_fields( $address_fields ) {
    $address_fields['city']['required'] = false;
    $address_fields['address_1']['required'] = false;
    $address_fields['postcode']['required'] = false;
    $address_fields['state']['required'] = false;
    $address_fields['country']['required'] = false;
    $address_fields['phone']['required'] = false;
    return $address_fields;
    }
    
    add_filter( 'woocommerce_billing_fields', 'ts_unrequire_wc_phone_field');
    function ts_unrequire_wc_phone_field( $fields ) {
    $fields['billing_city']['required'] = false;
    $fields['billing_address_1']['required'] = false;
    $fields['billing_postcode']['required'] = false;
    $fields['billing_state']['required'] = false;
    $fields['billing_country']['required'] = false;
    $fields['billing_phone']['required'] = false;
    return $fields;
    }

    #2353012
    que
    Participant
    Padawan WordPress
    77 contributions

    Bonjour,

    Désolé de vous solliciter à nouveau.

    J’ai repris vos codes et j’ai fait bcp bcp de tests mais j’arrive pas à ce que je souhaite.

    Je souhaite ne rien avoir ni dans Détails de Facturation ni dans Informations Complémentaires mais

    Sur ma page Checkout, dans la partie “Informations Complémentaires” j’ai les champs suivants quand je veux valider ma commande qui me bloquent.
    Address 1 *

    Address 2(facultatif)

    City *

    State *

    Zip *

    Country *

    Phone *

    Voici le code que j’ai utilisé qui devrait me permettre de supprimer tous les  champs:

    // Cette fonction supprime les champs.
    add_filter( ‘woocommerce_checkout_fields’ , ‘custom_override_checkout_fields’ );
    function custom_override_checkout_fields( $fields ) {
    unset($fields[‘billing’][‘billing_postcode’]);
    unset($fields[‘billing’][‘billing_country’]);
    unset($fields[‘billing’][‘billing_first_name’]);
    unset($fields[‘billing’][‘billing_state’]);
    unset($fields[‘billing’][‘billing_phone’]);
    unset($fields[‘order’][‘order_comments’]);
    unset($fields[‘billing’][‘billing_address_2’]);
    unset($fields[‘billing’][‘billing_address_1’]);
    unset($fields[‘billing’][‘billing_company’]);
    unset($fields[‘billing’][‘billing_last_name’]);
    unset($fields[‘billing’][‘billing_email’]);
    unset($fields[‘billing’][‘billing_city’]);
    unset($fields[‘shipping’][‘shipping_postcode’]);
    unset($fields[‘shipping’][‘shipping_country’]);
    unset($fields[‘shipping’][‘shipping_first_name’]);
    unset($fields[‘shipping’][‘shipping_state’]);
    unset($fields[‘shipping’][‘shipping_phone’]);
    unset($fields[‘shipping’][‘shipping_address_2’]);
    unset($fields[‘shipping’][‘shipping_address_1’]);
    unset($fields[‘shipping’][‘shipping_company’]);
    unset($fields[‘shipping’][‘shipping_last_name’]);
    unset($fields[‘shipping’][‘shipping_email’]);
    unset($fields[‘shipping’][‘shipping_city’]);
    return $fields;
    }

    Cela ne fonctionne pas. Je ne sais pas pourquoi

    De plus Il me semble qu’il y a un lien entre la partie Détails de Facturation et partie la Informations complémentaire car en fonction de ce que je fais tout se modifie.

    J’avais installé les app Checkout Field Editor for WooCommerce et Checkout Manager for WooCommerce mais pour le moment elles sont desactivées. Faut il les supprimer?

    Avez vous une idée?

    Merci prou votre aide.

     

     

    • Cette réponse a été modifiée le il y a 6 jours et 23 heures par que.
    #2353067
    ferman
    Participant
    Maître WordPress
    2815 contributions

    Bonjour,

    Votre code marche. Je vous mets deux pj avant code / après code.  Pourquoi est-ce-que ça ne marche pas chez vous? Je vois deux possibilités. Pour qu’ils fonctionnent, je dois à chaque fois modifier les guillemets des codes que vous me donnez:

    unset($fields[‘shipping’][‘shipping_phone’]); mauvais

    unset($fields[‘shipping’][‘shipping_phone’]); bon

    Si vous copiez à partir d’un traitement de texte (celui de wp, word…) ça ne peut pas marcher. Il faut absolument passer par un éditeur de texte tel notepad++ et les fichiers doivent être au format php.

    Deuxième possibilité, votre page checkout n’est pas une page standard woocommerce mais une page personnalisée créée avec une extension, ou du code?  J’ai comparé avec la mienne qui est la page standard, ce n’est pas la même chose. En particulier je n’ai pas de section “information complémentaire”. Si c’est le cas,  je ne peux rien dire.

    Autrement, je ne vois pas

    Fichiers joints :
    Vous devez être connecté pour voir les fichiers joints.
    #2353111
    ferman
    Participant
    Maître WordPress
    2815 contributions

    Bonjour,

    Regardez peut-être ceci, ou ça ou encore ça. Il y a beaucoup d’autres références sur le net, il faut essayer. Je ne peux pas car je n’ai pas d’informations supplémentaires sur ma page de paiement. Regardez aussi ici pour une solution CSS.

    #2353170
    que
    Participant
    Padawan WordPress
    77 contributions

    Bonjour, Merci pour cette aide. J’ai fait à nouveau bcp de tests, j’ai changé de thème mais rien n’y fait.

    Je me retrouve toujours avec un champ qui apparait est  que je ne peux faire partir.

    Une question : Comment est ce que je peux faire pour accéder à tous les fichiers de mon word press, car je voudrais rechercher ou se trouve ce champ qui me pose problème , à moins que ce champ se trouve dans la BD mais je ne sais dans quelle colonne de la table ???

    Merci.

    #2353177
    ferman
    Participant
    Maître WordPress
    2815 contributions

    Vous trouverez ce qui concerne le champ information supplémentaire dans le fichier woocommerce->templates->checkout->form-shipping.php, en bas du fichier: <div class=”woocommerce-additional-fields”> mais c’est compliqué et ça n’apportera pas grand chose.

    Vous pouvez accéder à ce dossier ainsi qu’à tous vos dossiers/fichiers wordpress par FTP  en utilisant Filezilla et pour cela, il faut d’abord télécharger sur votre PC l’extension “Filezilla”. Je crois que vous savez déjà ça. Sinon, vous pouvez le faire à partir d’ici ou bien comme indiqué sur cette vidéo.Ce n’est pas dans la base de données.

    Je pense que dans votre cas, la méthode la plus simple et qui devrait vous suffire est la méthode CSS que je viens d’essayer sur votre site. Dans les CSS additionnelles du thème mettez simplement le code ci-dessous:

    .woocommerce-additional-fields{display:none;}

    C’est valable pour votre thème actuel. Si vous changez de thème, il faudra vérifier et au besoin faire une simple modification.

    #2353498
    que
    Participant
    Padawan WordPress
    77 contributions

    Bonjour,

    Merci pour ton aide. Nouveau départ avec un nouveau WP, ce sera plus rapide !!

    Merci pour ton implication.

14 sujets de 1 à 14 (sur un total de 14)
  • Vous devez être connecté pour répondre à ce sujet.