Получить ошибки от ошибки WP до разных переменных


Я добавил несколько ошибок в WP_ERROR. Я хочу получить эти ошибки отдельно в разных переменных. С помощью следующего кода я могу получить все ошибки с циклом foreach, но как я могу назначить их отдельным переменным.

Я добавил следующие ошибки: "ошибка входа в систему " и "ошибка электронной почты'.

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

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

Я попытался добавить это в вышеприведенный цикл:

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

Но он присваивает одну и ту же ошибку обоим переменные.

Редактировать:

Когда форма отправлена и в любом поле есть ошибка, я добавляю ошибки следующим образом:

$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;
        }

После этого я хочу отобразить вышеуказанные ошибки рядом с каждым полем формы, поэтому я хочу получить ошибки отдельно.

Author: jay, 2013-10-27

1 answers

Перенос данных об ошибках в независимую переменную - пустая трата усилий. У вас уже есть необходимые данные в WP_Error объект и могли бы получить его с помощью чистого синтаксиса PHP-объекта и массива, если хотите, но давайте рассмотрим методы, которые объект предоставляет для извлечения данных (с примечаниями, скопированными из Кодекса):

$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. 

Если вы посмотрите на этот вывод, вы сразу должны заметить несколько вариантов:

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

Например, в вашей форме рядом с именем пользователя поле...

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

Я не уверен, как выглядит ваша полная реализация. Вам почти наверняка нужно что-то более сложное, но в этом и заключается идея.

 0
Author: s_ha_dum, 2013-10-27 15:55:05