J'ai écrit deux plugins qui utilisent le filtre registration_errors:
add_filter( 'registration_errors', 'process_payment', 10, 3 );
add_filter( 'registration_errors', 'add_user_to_SF', 10, 3 );
Lorsque add_user_to_SF
renvoie des erreurs, la fonction process_payment
s'exécute correctement (je le sais car elle traite un paiement).
Comment puis-je configurer cela pour que, lorsque l'un d'eux renvoie une erreur, l'autre ne s'exécute pas et que l'enregistrement de l'utilisateur ne se produise pas?
Exécuter add_user_to_SF
avec une priorité antérieure, pour le faire exécuter en premier
add_filter( 'registration_errors', 'add_user_to_SF', 9, 3 );`
Supposons que vous avez deux erreurs possibles dans votre add_user_to_SF
:
function add_user_to_SF( $errors, $sanitized_user_login, $user_email )
{
$has_errors = false;
if ( /* some condition that should throw an error */ ) {
$errors->add( 'some_error', 'some message' );
$has_errors = true;
}
if ( /* another condition that should throw an error */ ) {
$errors->add( 'another_error', 'another message' );
$has_errors = true;
}
if ( ! $has_errors ) {
/* write to your external DB */
}
return $errors;
}
Recherchez ensuite ces erreurs dans la dernière fonction en utilisant la méthode $errors
de l'objet get_error_codes
:
function process_payment( $errors, $sanitized_user_login, $user_email )
{
$error_codes = $errors->get_error_codes();
if (
is_array( $error_codes ) &&
! empty( $error_codes ) &&
! empty( array_intersect( array( 'some_error', 'another_error' ), $error_codes ) )
) {
return $errors;
} else {
/* run your payment processing */
}
return $errors;
}
Ce qui suit est une maquette de la façon dont vous le feriez avec un indicateur en tant que propriété de classe:
if ( ! class_exists( 'WPSE_96362_Registration_Errors' ) ) {
class WPSE_96362_Registration_Errors
{
/* error flag */
private $has_errors = false;
/* constructor with filters */
public function __construct()
{
/* earlier priority for "add_user_to_SF" method */
add_filter( 'registration_errors', array( $this, 'add_user_to_SF' ), 9, 3 );
add_filter( 'registration_errors', array( $this, 'process_payment' ), 10, 3 );
}
public function add_user_to_SF( $errors, $sanitized_user_login, $user_email )
{
if ( /* some condition that should throw an error */ ) {
$errors->add( 'some_error', 'some message' );
$this->has_errors = true;
}
if ( /* another condition that should throw an error */ ) {
$errors->add( 'another_error', 'another message' );
$this->has_errors = true;
}
if ( ! $this->has_errors ) {
/* write to your external DB */
}
return $errors;
}
public function process_payment( $errors, $sanitized_user_login, $user_email )
{
if ( $this->has_errors ) {
return $errors;
} else {
/* run your payment processing */
}
return $errors;
}
}
}
$wpse_96362_registration_errors = new WPSE_96362_Registration_Errors();