Почему, когда я создаю экземпляр ошибки wp в методе проверки, мой метод регистрации пользователя перестает работать?
Я был бы очень, очень признателен за любую информацию, которую я могу получить здесь.
Я работаю над плагином WordPress, который регистрирует пользователей в WordPress и хочет проверять данные, отправленные через форму. У меня есть класс для этого, вот его сокращенная версия:
namespace PluginName\Includes\Forms\Classes;
class Validation {
public function validate_fields($field, $form_type){
$errors = new WP_Error();
$validated_fields = [];
if(!is_email($field)):
$errors->add('not_email', __('Entered an invalid email', 'plugin-name'));
else:
$validated_fields['user_email'] = $field;
endif;
//other validations
$error_code = $errors->get_error_code();
if(!empty($error_code)):
return $errors;
endif;
return $validated_fields;
}
}
В моем классе регистрации пользователей я создаю экземпляр класса выше, чтобы получить все, что он возвращает, и массив данных полей или ошибок.
Вот мой класс Register_User сокращенный:
namespace PluginName\Includes\Forms\Classes;
class Register_User{
public function __construct(){
add_action('wp_ajax_pn_register_user', [$this, 'pn_register_user']);
add_action('wp_ajax_nopriv_pn_register_user', [$this, 'pn_register_user']);
}
public function pn_register_user(){
if (!check_ajax_referer( 'reg_nonce' )):
wp_die();
endif;
$form_validation = new Validation();
$form_validation_results = $form_validation->validate_fields($_POST, 'registration');
if(is_wp_error($form_validation_results)):
error_log('Some error happened');
else:
error_log('No Errors to report');
$userdata = array(
'user_email' => $form_validation_results['user_email']
//other fields
);
wp_insert_user($userdata);
endif;
wp_die();
}
}
Это не работает, если у меня есть эта строка в классе проверки: $errors = new WP_Error();
- форма отправлена, но пользователь не зарегистрирован, как только я прокомментирую все, что связано с WP_Error, пользователь зарегистрирован нормально. И это не связано с какой-либо проверкой, даже без проверки, а просто с экземпляром объекта WP_Error, он не работает.
Опять же, я был бы очень признателен за любую помощь, которую я могу получить, моя голова вот-вот взорвется. Я ничего не смог найти на сайте или в другом месте. Я не уверен, что это проблема с областью действия или проблема ajax? что касается первого, я попытался сделать ошибки $ глобальными, но все равно безрезультатно.
Пожалуйста, помогите
1 answers
Похоже, вам нужно использовать $errors = new \WP_Error();
в своем коде, поскольку WP_Error
не является частью вашего пространства имен.
Я провел быстрый тест на своей машине, используя команды wp-cli:
Использование new WP_Error()
:
% wp eval 'namespace PJ\NS\Test; $x = new WP_Error(); var_dump( $x );'
Fatal error: Uncaught Error: Class 'PJ\NS\Test\WP_Error' not found in phar:///usr/local/bin/wp/vendor/wp-cli/eval-command/src/Eval_Command.php(37) : eval()'d code:1
Stack trace:
#0 phar:///usr/local/bin/wp/vendor/wp-cli/eval-command/src/Eval_Command.php(37): eval()
#1 [internal function]: Eval_Command->__invoke(Array, Array)
#2 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/CommandFactory.php(98): call_user_func(Array, Array, Array)
#3 [internal function]: WP_CLI\Dispatcher\CommandFactory::WP_CLI\Dispatcher\{closure}(Array, Array)
#4 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/Subcommand.php(451): call_user_func(Object(Closure), Array, Array)
#5 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(371): WP_CLI\Dispatcher\Subcommand->invoke(Array, Array, Array)
#6 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(394): WP_CLI\Runner->run_command(Array, Array)
#7 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(87): WP_CLI\Runne in phar:///usr/local/bin/wp/vendor/wp-cli/eval-command/src/Eval_Command.php(37) : eval()'d code on line 1
Error: There has been a critical error on your website.Learn more about debugging in WordPress. There has been a critical error on your website.
Использование new \WP_Error()
:
% wp eval 'namespace PJ\NS\Test; $x = new \WP_Error(); var_dump( $x );'
object(WP_Error)#1516 (2) {
["errors"]=>
array(0) {
}
["error_data"]=>
array(0) {
}
}