自定义“注册完成。请查看您的电子邮件。”WP 4.0上的消息

时间:2014-09-17 作者:Christine Cooper

我们如何自定义“注册完成。请检查您的电子邮件”在WordPress 4.0上注册时出现的消息?在以前的版本中,Dave Ross 解决方案有效:

add_filter( \'wp_login_errors\', \'override_reg_complete_msg\', 10, 2 );
function override_reg_complete_msg( $errors, $redirect_to ) {
   if( isset( $errors->errors[\'registered\'] ) ) {
     $needle = __(\'Registration complete. Please check your e-mail.\');
     foreach( $errors->errors[\'registered\'] as $index => $msg ) {
       if( $msg === $needle ) {
         $errors->errors[\'registered\'][$index] = \'Your new message\';
       }
     }
   }

   return $errors;
}
正在查看wp-login.php, 未对Filter the login page errors 信息。为什么上述代码在WP 4中不起作用?

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

如果您需要另一种方法,您可以随时使用login_init 并修改gettext 过滤器:

add_filter( \'login_init\',
    function()
    {
      add_filter( \'gettext\', \'wpse_161709\', 99, 3 );
    }
);

function wpse_161709( $translated_text, $untranslated_text, $domain )
{
    $old = "Registration complete. Please check your e-mail.";
    $new = "New text here";

    if ( $untranslated_text === $old )
    {         
        $translated_text = $new;
        remove_filter( current_filter(), __FUNCTION__ );
    }
    return $translated_text;
}
更新-更新WP_Error 类已更改:的定义似乎有所更改errors 的属性WP_Errors 类别:

在WordPress中version 3.9 我们得到了这个部分:

var $errors = array();
但在WordPress中version 4.0 已更改为:

private $error_data = array();
因此,此属性的范围已从公共更改为私有。

这就是为什么你can\'t modify it 直接在WordPress 4.0+。

。。。但是你可以使用魔法__set__get 方法WP_Errorintroduced 在WordPress 4.0中。

然后您的代码示例可以修改为:

add_filter( \'wp_login_errors\', \'wpse_161709\', 10, 2 );

function wpse_161709( $errors, $redirect_to )
{
   if( isset( $errors->errors[\'registered\'] ) )
   {
     // Use the magic __get method to retrieve the errors array:
     $tmp = $errors->errors;   

     // What text to modify:
     $old = __(\'Registration complete. Please check your email.\');
     $new = \'Your new message\';

     // Loop through the errors messages and modify the corresponding message:
     foreach( $tmp[\'registered\'] as $index => $msg )
     {
       if( $msg === $old )
           $tmp[\'registered\'][$index] = $new;        
     }
     // Use the magic __set method to override the errors property:
     $errors->errors = $tmp;

     // Cleanup:
     unset( $tmp );
   }  
   return $errors;
}
更改此特定错误消息。

以下是截图示例:

一零Before

After:

After

结束

相关推荐

get_posts() and filters

我为添加了自定义筛选函数the_posts 在插件中筛选。add_filter(\'the_posts\', \'posts_filter\'); function posts_filter() { … } 这在主循环中运行得很好,这意味着帖子会按照我在posts_filter 作用但我正在打电话get_posts() 在ajax请求中获取一些帖子。在那里,过滤器不起作用。query_posts() 或自定义wp_query 不要工作太多。所以问题是:我如何才能在主循环旁获得按the_p