在MU插件中重新定义wp_password_change_Notify合法吗?

时间:2015-02-03 作者:Shawn

我试图为这个功能添加一些逻辑,即何时提醒管理员密码更改,但根本没有发送电子邮件。codex说它需要在插件中声明,那么这对mu插件是合法的还是只有特定的位置可以重新声明?

目前,这大致是我的代码,但邮件从未发出:

if(!function_exists(\'wp_password_change_notification\')){
    //die(\'I can get here\');
    function wp_password_change_notification($user){
        //die(\'but never get here\');
        //...code...
        wp_mail(get_option(\'admin_email\'), sprintf(__(\'[%s] Password Lost/Changed\'), $blogname), $message);
    }
}

4 个回复
SO网友:Milo

下面是一个工作示例的内容,放在wp-includes/mu-plugins/. 当用户在收到的电子邮件中单击重置链接后完成密码重置操作时,将发送该电子邮件。

<?php
if( ! function_exists( \'wp_password_change_notification\' ) ){
    function wp_password_change_notification( &$user ){
        wp_mail( get_option(\'admin_email\'), \'Test\', \'test\' );
    }
}

SO网友:Mark Kaplun

它也应该可以从mu插件中工作。(法典不是很准确,也可以从主题重写此功能)

SO网友:OnethingSimple

*添加了我在沙盒站点的仪表板上创建和测试的代码。它在下面,它将发送一封关于用户密码更新的电子邮件。

您可以按照自己的意愿编辑代码。在许可GLP2下,您应该也使用相同的许可分发代码。因此,如果我制作一个WP主题并分发它,我应该在GLP2下许可我的主题。这并没有阻止我为我的主题、插件或任何我用Wordpress制作的东西收费。为了更直接地回答您的问题,欢迎您随意修改Wordpress的安装。但是,不建议这样做。由于安全补丁或任何数量的其他未来重要更新,您可能需要更新该安装,并且您覆盖核心WP代码所做的任何工作都将丢失。

您只能覆盖可插入函数一次。我建议你看看http://code.tutsplus.com/articles/understanding-wordpress-pluggable-functions-and-their-usage--wp-30189 要了解如何使用可插拔函数。如果您在覆盖函数时遇到问题,可能是另一个插件已经在这样做了。与其覆盖核心代码,不如更安全地删除插件,或者在插件代码中添加挂钩。不管怎样,你都在你的合法权利范围内。

Wordpress为开发人员提供了挂钩,这样我们就可以深入了解核心的功能,而不必实际接触核心代码。的确,有些函数在过去是我们无法实现的。总有这样一种可能性:今天有一种方法可以做一些事情,而去年用钩子做不到。这使得WP代码安全,最重要的是您的代码安全。也许像“profile\\u update”这样的东西可以满足您的需要。“此挂钩允许您在用户的数据库信息更新后立即访问其数据。使用此挂钩将两个参数传递给函数:“user\\u id”(int)和“old\\u user\\u data”(object)。”UPDATE “profile\\u update”钩子在管理区域(仪表板)中不起作用,所以我找到了这个钩子,并创建了一个函数来执行您需要的操作,而不覆盖任何内容。

/** This will hook into any profile change (tested from dashboard) */
add_action(\'personal_options_update\', \'notify_admin_user_update\');

function notify_admin_user_update ($user_id) {

    // Check to see that the password fields were used
    if ( !empty($_POST[\'pass1\']) && !empty($_POST[\'pass2\']) ) {
        // Make sure the 2 values match, or the password wouldn\'t have changed
        if ( $_POST[\'pass1\'] === $_POST[\'pass2\'] ) {

            // Get the user information
            $user = get_userdata( $user_id );
            $username = $user->user_login;
            $password = $_POST[\'pass1\'];

            // Get the admin email address
            $admin_email = get_bloginfo(\'admin_email\');

            // Create an email
            $subject = "User updated profile";
            $message = "Hello,\\n Username {$username} is a good doobi and updated their password,\\n"
                     . "Don\'t be a bad doobi and send their password in plaintext to your email.\\n"
                     . "Like this... their new email is {$password}";

            // Ship it out!
            wp_mail($admin_email, $subject, $message );
        }
    }

}
此外,请查看Wordpress上的add\\u操作参考。组织机构http://codex.wordpress.org/Function_Reference/add_action

SO网友:Shawn

我花了一些时间挖掘核心和堆栈跟踪来得到我的答案。

答案是否定的。这是不可能的,因为mu插件在可插拔之前运行。php。由于这是一个可插入函数,因此无法正确处理此函数的使用。另外一点信息是,您不能在mu插件中使用带有wp\\U mail的可插入函数,因为如果执行该函数,将返回一个php fatal not found。

结束

相关推荐

对于核心.php模板之外的所有内容,站点的本地副本返回404

这似乎是一个常见的问题,但我已经尝试了我在这个论坛上看到的每一个修复程序,仍然无法使我的WP站点的本地副本正常工作。我可以在localhost/mysite查看我的主页,甚至可以查看/wp登录。php。然而,我无法查看任何帖子或其他非核心页面。我在这些页面上收到404条。此外,我的登录信息不会将我登录到该站点,即使我已确认所有用户信息都在数据库迁移过程中幸存下来。我在本地Debian灯组上。我所做的事情:已更改www.mydomain.com 到localhost/mysite 在wp\\U选项和wp\\