将错误从WP_ERROR获取到不同的变量

时间:2013-10-27 作者:jay

我在WP\\u错误中添加了多个错误。我想在不同的变量中分别得到这些错误。使用下面的代码,我可以获得foreach循环的所有错误,但如何将它们分配给单独的变量呢。

我添加的错误是\'login_error\' 和\'email_error\'.

<?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;
        }
之后,我想在每个表单字段旁边显示上述错误,这就是我想分别获取错误的原因。

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

将误差数据压入自变量是一种浪费。您已经在WP_Error 对象,如果您愿意,可以使用纯PHP对象和数组语法来获取它,但让我们看看该对象提供的检索数据的方法(使用从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. 
如果查看该输出,您应该立即发现几个选项:

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
我不确定您的完整实现是什么样子的。你几乎肯定需要更复杂的东西,但这就是想法。

结束

相关推荐

Security and Must Use Plugins

从codex article 必须使用插件:只需将文件上载到mu插件目录即可启用,无需登录我觉得这是一个潜在的安全问题。在站点上运行插件中的任何代码之前,必须通过管理面板激活常规插件。我一直认为这是一个明智的安全预防措施,因为攻击者如果能够以某种方式将文件上载到plugins文件夹,则在运行代码之前,还必须访问和修改数据库。这个mu-plugins 文件夹似乎提供了一种简单的方法来避免这种情况。我知道WordPress开发人员比我更了解安全性,所以我想知道是否有人能解释为什么这不是一个安全漏洞。