web-dev-qa-db-fra.com

Récupère les erreurs de WP_Error sur différentes variables

J'ai ajouté plusieurs erreurs dans le WP_ERROR. Je veux obtenir ces erreurs séparément dans différentes variables. Avec le code suivant, je peux obtenir toutes les erreurs avec foreach loop, mais comment puis-je les affecter à des variables distinctes.

Les erreurs que j'ai ajoutées sont ' login_error ' et ' email_error '.

<?php
    $return = my_custom_function();
    if ( is_wp_error($return) ){

         foreach ( $return -> get_error_messages() as $error ) {
            echo $error;
         }      
    }
?>

J'ai essayé d'ajouter ceci dans la boucle ci-dessus:

$login_error = apply_filters('login_error', $error); 
$email_error = apply_filters('email_error', $error); 

Mais cela attribue la même erreur aux deux variables.

Modifier:

Lorsqu'un formulaire est soumis et qu'un champ comporte une erreur, j'ajoute des erreurs de la manière suivante:

$errors -> add( 'login_error', __( 'Please type your username' ) );
$errors -> add( 'email_error', __( 'Please type your e-mail address.' ) );   

 if ( $errors->get_error_code() ){          
            return $errors;
        }

Après cela, je souhaite afficher les erreurs ci-dessus à côté de chaque champ de formulaire, c’est pourquoi je veux obtenir les erreurs séparément.

1
jay

Transférer les données d'erreur en variable indépendante est une perte de temps. Vous avez déjà les données dont vous avez besoin dans l'objet WP_Error et pouvez y accéder avec la syntaxe pure PHP de l'objet et du tableau si vous le souhaitez. , mais regardons les méthodes fournies par l’objet pour récupérer les données (avec les notes copiées du Codex):

$errors = new WP_Error;
$errors -> add( 'login_error', __( 'Please type your username' ) );
$errors -> add( 'email_error', __( 'Please type your e-mail address.' ) );   

var_dump($errors->get_error_codes());
//     Retrieve all error codes. Access public, returns array List of error codes, if available. 
var_dump($errors->get_error_code());
//     Retrieve first error code available. Access public, returns string, int or Empty if there is no error codes
var_dump($errors->get_error_messages('login_error'));
//     Retrieve all error messages or error messages matching code. Access public, returns an array of error strings on success, or empty array on failure (if using code parameter) 
var_dump($errors->get_error_message('login_error'));
//     Get single error message. This will get the first message available for the code. If no code is given then the first code available will be used. Returns an error string. 
var_dump($errors->get_error_data('login_error'));
//     Retrieve error data for error code. Returns mixed or null, if no errors. 

Si vous regardez cette sortie, vous devriez immédiatement repérer plusieurs options:

array(2) {
  [0]=>
  string(11) "login_error"
  [1]=>
  string(11) "email_error"
}
string(11) "login_error"
array(1) {
  [0]=>
  string(25) "Please type your username"
}
string(25) "Please type your username"
NULL

Par exemple, dans votre formulaire près du champ Nom d'utilisateur ...

// username field
echo implode(', ',$errors->get_error_messages('login_error')); // empty string if no error; aka prints nothing if no error

Je ne sais pas à quoi ressemble votre mise en œuvre complète. Vous avez certainement besoin de quelque chose de plus compliqué, mais c'est l'idée.

0
s_ha_dum