modification profil utilisateur sans email (empty_email) (Créer un compte)

  • Statut : non résolu
15 sujets de 1 à 15 (sur un total de 19)
  • Auteur
    Messages
  • #545833
    EmmaJung
    Participant
    Chevalier WordPress
    149 contributions

    Bonjour et meilleurs vœux !

    Dans les versions antérieures de WP, il était possible de supprimer le message d’erreur lorsqu’on édite le profil d’un utilisateur qui n’a pas d’adresse mail, avec la fonction suivante :

    [c]add_action( ‘user_profile_update_errors’, ‘remove_empty_email_error’ );
    function remove_empty_email_error( $arg ) {
    if ( !empty( $arg->errors ) ) unset( $arg->errors );
    }[/c]

    Depuis que j’ai mis à jour WP 4.1, cette fonction ne masque pas l’erreur et bloque l’édition.

    Sauriez-vous me conseiller pour que ça fonctionne à nouveau ?
    Merci de votre aide.

    #989271
    didier07
    Participant
    Maître WordPress
    1965 contributions

    Recherche si le hook user_profile_update_errors n’a pas été modifié. Ca arrive de temps en temps que des noms de hooks changent.

    Didier

    #989272
    EmmaJung
    Participant
    Chevalier WordPress
    149 contributions

    Bonjour Didier,
    J’ai regardé, le hook est le même depuis 2.8.0, ça ne vient pas de là.
    Je vais tester sur un autre site pour vérifier si ça vient de ma config ou pas.

    #989273
    EmmaJung
    Participant
    Chevalier WordPress
    149 contributions

    [Edit] C’est dépendant de la version de WP :
    – 3.8.5 : OK
    – 4.01 ou 4.1 : KO

    Mais franchement pas d’idée de l’origine, vu que users.php et le hook n’ont pas changé …
    Une idée ?

    #989274
    didier07
    Participant
    Maître WordPress
    1965 contributions

    [c]do_action_ref_array( ‘user_profile_update_errors’, array( &$errors, $update, &$user ) );[/c]

    Le paramètre passé au hook user_profile_update_errors est un tableau, donc je pencherai pour une syntaxe du type
    add_action( ‘user_profile_update_errors’, ‘remove_empty_email_error’ );
    function remove_empty_email_error( $arg ) {
    if ( ! empty( $arg ) ) unset( $arg );
    }

    #989275
    EmmaJung
    Participant
    Chevalier WordPress
    149 contributions

    Ce n’est pas une syntaxe valide.
    Voilà pour info l’array $errors avant le hook :
    [c]WP_Error Object
    (
    [errors] => Array
    (
    [empty_email] => Array
    (
    [0] => ERREUR : veuillez saisir une adresse de messagerie.
    )
    )
    [error_data] => Array
    (
    [empty_email] => Array
    (
    [form-field] => email
    )
    )
    )[/c]

    Et quand ça marche ça retourne :
    [c]WP_Error Object
    (
    [errors] => Array
    (
    )
    [error_data] => Array
    (
    [empty_email] => Array
    (
    [form-field] => email
    )
    )
    )[/c]

    #989276
    didier07
    Participant
    Maître WordPress
    1965 contributions

    et ca ca retourne quoi ?

    add_action( ‘user_profile_update_errors’, ‘remove_empty_email_error’ );
    function remove_empty_email_error( $arg ) {
    var_dump( $arg);
    }

    #989277
    EmmaJung
    Participant
    Chevalier WordPress
    149 contributions

    Attends, je crois que j’ai trouvé :

    Avec WP 4.1 l’array $errors est

    [c]WP_Error Object
    (
    [errors:private] => Array
    (
    [empty_email] => Array
    (
    [0] => ERREUR : veuillez saisir une adresse de messagerie.
    )
    )
    [error_data:private] => Array
    (
    [empty_email] => Array
    (
    [form-field] => email
    )
    )
    )
    [/c]

    [errors:private] au lieu de [errors]

    J’ai essayé de modifier la fonction
    if ( !empty( $arg->errors:private ) ) unset( $arg->errors:private );

    Mais ça plante :(

    Une idée ?

    #989278
    didier07
    Participant
    Maître WordPress
    1965 contributions

    Oui, l’attribut errors était public, maintenant il est privé :lol::lol::lol:

    Les conséquences sont simples : Tu ne peux pas y accéder directement, il faut passer par une fonction de la classe WP_Errors.

    Ca tourne autour de ça en gros

    add_action( ‘user_profile_update_errors’, ‘remove_empty_email_error’ );
    function remove_empty_email_error( $arg ) {
    $errors = $arg->__get( ‘errors’ );
    if ( $errors ) $errors->__unset( $arg->errors );
    }

    #989279
    EmmaJung
    Participant
    Chevalier WordPress
    149 contributions

    Il y a de l’idée, car le test fonctionne.
    En revanche,
    – $errors->__unset( $arg->errors ); est invalide
    – idem pour __unset( $arg->errors );
    J’ai beau bidouiller je ne trouve pas la solution.

    #989280
    didier07
    Participant
    Maître WordPress
    1965 contributions

    [c]function remove_empty_email_error( $arg ) {
    var_dump( $arg) ;
    }[/c]
    Ca donne quoi ?

    #989281
    EmmaJung
    Participant
    Chevalier WordPress
    149 contributions

    Ah, bah le var_dump(), ça va tout supprimer !
    Donc plus aucun risque d’être embêté 😉
    Mais je préfèrerais quand même garder les autres tests au cas où ! (c’est un site avec 2 autres admin, moins expérimentés).

    #989282
    didier07
    Participant
    Maître WordPress
    1965 contributions

    Non, le var_dump c’est pour connaitre le contenu de $args 🙂
    S’il n’affiche rien, ajoute die(); derrière

    #989283
    EmmaJung
    Participant
    Chevalier WordPress
    149 contributions

    Ah OK, c’est donc comme print_r($arg).

    Ca affiche la même chose :
    object(WP_Error)#10890 (2) { [“errors:private”]=> array(1) { [“empty_email”]=> array(1) { [0]=> string(73) “ERREUR : veuillez saisir une adresse de messagerie.” } } [“error_data:private”]=> array(1) { [“empty_email”]=> array(1) { [“form-field”]=> string(5) “email” } } }

    Ce qui m’intéresse, c’est de supprimer :
    [“empty_email”]=> array(1) { [0]=> string(73) “ERREUR : veuillez saisir une adresse de messagerie.” }

    et, s’il y avait une autre erreur, de la laisser.

    #989284
    didier07
    Participant
    Maître WordPress
    1965 contributions
    EmmaJung wrote:
    Ah OK, c’est donc comme print_r($arg).
    A un détail près, var_dump te donne le type en plus 👏

    add_action( ‘user_profile_update_errors’, ‘remove_empty_email_error’ );
    function remove_empty_email_error( $arg ) {
    $errors = $arg->__get( ‘errors’ );

    if ( ! $errors )
    return;
    unset( $errors):
    $args->__set( ‘errors’, $errors );
    }

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