如何在没有通知和确认过程的情况下更改 WordPress 中的主管理员电子邮件地址

Posted

技术标签:

【中文标题】如何在没有通知和确认过程的情况下更改 WordPress 中的主管理员电子邮件地址【英文标题】:How to change main admin email address in WordPress without notification and confirmation processes 【发布时间】:2018-06-20 10:54:43 【问题描述】:

我在登台服务器中创建了一个站点,我想更改该登台站点的管理员电子邮件地址。 因为当时我想在临时站点上测试一些东西,并且我希望没有电子邮件发送给客户(原始管理员电子邮件),所以我想更改主管理员电子邮件。

但是当我更改管理员电子邮件时,我会收到指向我的新管理员电子邮件地址的确认链接。

在我点击确认电子邮件中的链接之前,管理员电子邮件地址不会改变。

点击确认链接后,原来的管理员正在收到管理员邮箱变更通知。

我想禁用 WordPress 中的管理员电子邮件更改通知以及新的管理员电子邮件地址确认链接。

我该怎么做?请你帮助我好吗?这个有代码吗?

【问题讨论】:

从数据库更改管理员电子邮件并替换为您自己的电子邮件。如果您没有数据库访问权限,那么我认为您将进行一些非法活动 有几种方法可以访问数据库 - 但如果您无权访问 phpmyadmin 或类似的东西,并且不知道如何使用其他程序访问它,那么您可以使用搜索和替换插件,或者sql插件,这样你仍然可以运行查询 安装管理员插件,它可以让你访问数据库。 或者如果是简单的S和R,那么你可以使用这个插件:wordpress.org/plugins/search-and-replace 或使用 SQL:wordpress.org/plugins/sql-executioner 【参考方案1】:

只是添加到选项表中可能没有“new_admin_email”行的其他一些答案。

“new_admin_email”值仅在您尝试通过正常设置页面 (/wp-admin/options-general.php) 更改原始管理员电子邮件后设置。如果您取消挂起的更改,它将被删除。

【讨论】:

【参考方案2】:

网络管理员电子邮件从 wp_sitemeta 表更改。如果您无法从网络管理员设置更改,请在 phpmyadmin 或任何 mysql 客户端中使用以下查询来更新电子邮件。

UPDATE `wp_sitemeta` SET `meta_value` = 'the_new_email@abc.com' WHERE `meta_value` = 'the_old_email@abc.com';

注意:如果您的情况不是 wp,请使用 db 中相应使用的表前缀。

【讨论】:

【参考方案3】:

您可以通过在您的主题function.php中添加以下代码来禁用电子邮件确认

    remove_action( 'add_option_new_admin_email', 'update_option_new_admin_email' );
remove_action( 'update_option_new_admin_email', 'update_option_new_admin_email' );

/**
 * Disable the confirmation notices when an administrator
 * changes their email address.
 *
 * @see http://codex.wordpress.com/Function_Reference/update_option_new_admin_email
 */
function wpdocs_update_option_new_admin_email( $old_value, $value ) 

    update_option( 'admin_email', $value );

add_action( 'add_option_new_admin_email', 'wpdocs_update_option_new_admin_email', 10, 2 );
add_action( 'update_option_new_admin_email', 'wpdocs_update_option_new_admin_email', 10, 2 );

【讨论】:

【参考方案4】:

有几种方法可以在不使用 3rd 方插件的情况下更改管理员电子邮件。

此外,除了 admin_email 之外,还有一个值需要更改。 无论您更改 DB 中的admin_email 值,都会保留确认通知, 除非您也更改 new_admin_email

通过数据库更新:

如果直接通过 DB 更新选项,有两个选项需要更改:admin_emailnew_admin_email

UPDATE wp_options SET option_value = 'admin@example.com' WHERE 
option_name LIKE 'admin_email' 
OR 
option_name LIKE 'new_admin_email';

注意:虽然默认情况下每个 WordPress 数据库的表都有 wp_ 前缀,但它们可以更改,因此请在 wp-config.php 中查看 @987654329 @ 价值。

通过 options.php 更新:

另一种不使用插件的方法是访问秘密页面/wp-admin/options.php。但是,可能有太多选项,并且由于为每个服务器设置了不同的$_POST 变量限制,因此完全不可能以这种方式进行更改。

查看更多关于max_input_vars https://www.php.net/manual/en/info.configuration.php

在活动主题中通过 functions.php 更新:

您可以在活动主题的 functions.php 中设置一个时间码(并在之后将其删除)以更新这些选项:

update_option( 'admin_email', 'admin@example.com' );

update_option( 'new_admin_email', 'admin@example.com' ); 

将这些放在一些admin_init 操作回调中。

通过 wp-cli 更新:

另一种更新管理员电子邮件的方法是通过 wp-cli(如果您可以访问终端 ssh):

wp option update admin_email 'admin@example.com'

wp option update new_admin_email 'admin@example.com'

查看更多关于 wp 选项命令的信息:

https://developer.wordpress.org/cli/commands/option/update/

【讨论】:

所以总有一个 new_admin_email?一旦通过 UI 确认,它将与 admin_email 相同?【参考方案5】:

你要进入mysql服务器

并运行以下查询

UPDATE `wp_options` SET `option_value` = 'mail@email.com' WHERE `option_id` = 6;

【讨论】:

【参考方案6】:

有一个“秘密”设置页面,可让您更改选项表中的所有设置。

通过将 URL 从 /options-general.php 更改为 /options.php 来访问它

【讨论】:

非常好,谢谢。这应该是选定的答案。 我已经与 WP 合作了 8 年,但我从来不知道这个页面。惊人的!您会惊讶于我收到了多少管理员电子邮件,因为新所有者只是拒绝更改站点管理员,而愚蠢的电子邮件确认块阻止我为他们做这件事。再也不!你让我免于在古代站点通知中无休止的骚扰。 非常感谢您 这已经不起作用了,我已经尝试过了,保存了更改,机器人回到了选项-常规并且有待处理邮件的通知。 在 5.1.1 上为我工作。有两个字段需要更改:“admin_email”和“new_admin_email”【参考方案7】:

更容易使用 phpMyAdmin

wp_options > admin_email

【讨论】:

【参考方案8】:

我遇到了同样的问题,所以我写了一个插件来回滚确认链接功能。您可以在 .org 存储库上下载它:

Change Admin Email Setting Without Outbound Email

代码如下:

<?php
/*
 Plugin Name: Change Admin Email Setting Without Outbound Email
 Plugin URI: https://wp-bdd.com/change-admin-email/
 Description: Restores functionality removed since WordPress 4.9. Allows the changing of the admin email by admins in single site without outbound email or recipient email credentials.
 Version: 1.0
 Author: John Dee
 Author URI: https://wp-bdd.com/
*/

$ChangeAdminEmailPlugin = new ChangeAdminEmailPlugin;

class ChangeAdminEmailPlugin

    public function __construct()

        //This plugin doesn't do anything unless it's WordPres version +4.9 and single site
        if($this->isWordPressMinimiumVersion("4.9.0") && (!( is_multisite())))
            //pulls the default actions
            remove_action( 'add_option_new_admin_email', 'update_option_new_admin_email' );
            remove_action( 'update_option_new_admin_email', 'update_option_new_admin_email' );

            //When you actually complete the change, another email gets fired to the old address
            //this filter overides this:
            add_filter('send_site_admin_email_change_email', function()return FALSE;, 10, 3 );

            //hooks our own custom method to update the email
            add_action( 'add_option_new_admin_email', array($this, 'updateOptionAdminEmail'), 10, 2 );
            add_action( 'update_option_new_admin_email', array($this, 'updateOptionAdminEmail'), 10, 2 );

            //this fixes the text in English. Translators wanted for other languages.
            add_action('wp_after_admin_bar_render', array($this, 'modifyOptionsGeneralPHPForm'));
        
    

    public function updateOptionAdminEmail( $old_value, $value ) 
        update_option( 'admin_email', $value );
    

    public function isWordPressMinimiumVersion($version)
        global $wp_version;
        if (version_compare($wp_version, $version, ">=")) 
            return TRUE;
         else 
            return FALSE;
        
    

    //Changes the form on admin area options-general.php. Doesn't do anything unless on this page.
    public function modifyOptionsGeneralPHPForm()
        $screen = get_current_screen();
        if($screen->base == "options-general")
            add_filter( 'gettext', array($this, 'filterText'), 10, 3 );
        
    

    //Changes the English text of WP core. Inspired by https://wordpress.stackexchange.com/questions/188332/override-default-wordpress-core-translation
    public function filterText( $translated, $original, $domain ) 
        if ( $translated == "This address is used for admin purposes. If you change this we will send you an email at your new address to confirm it. <strong>The new address will not become active until confirmed.</strong>")
            $translated = __("This address is used for admin purposes.");
        
        return $translated;
    


【讨论】:

【参考方案9】:

您要替换的实际上是 Wordpress 设置中的电子邮件,而不是 wp 用户电子邮件。那一个可以直接在数据库中的表wp_options 中更改,其中option_nameadmin_email

或者使用给定的更新查询:

UPDATE `wp_options` SET `option_value` = 'new@email.com' WHERE `option_name` = 'admin_email';

【讨论】:

这是最好的答案,因为options.php 并不总是保存/正常工作【参考方案10】:

注意:获取转储并先在本地尝试。不要在生产环境中测试。

用数据库改变

//email
UPDATE `wp_users` SET `user_email` = "new_email_address" WHERE `wp_users`.`user_login` = "admin";

//password
UPDATE `wp_users` SET `user_pass` = MD5('new_password_here') WHERE `wp_users`.`user_login` = "admin";

Check This too

【讨论】:

他在 cmets 中提到我无法访问数据库 这不是问题,它在我添加答案时并行添加 @BilalAhmed 那是我的疑问,如果无法访问我该怎么做? 我认为此查询只会更改管理员登录电子邮件 ID。 我在 wp_option 表的数据库中找到了管理员电子邮件。在 wp_option 表中,我们可以看到需要更改的区域的 admin_email 选项【参考方案11】:

运行此查询,这将更改电子邮件 ID,无需任何确认

UPDATE `wp_users` SET `user_email` = 'newemail' WHERE `user_email` = 'old_email';

【讨论】:

以上是关于如何在没有通知和确认过程的情况下更改 WordPress 中的主管理员电子邮件地址的主要内容,如果未能解决你的问题,请参考以下文章

在没有确认对话框的情况下取消下拉列表的更改事件

iOS 8. 在没有任何通知的情况下更改应用徽章编号

如何要求用户确认对访问记录的编辑

WordPress REST API - 如何在没有插件的情况下进行身份验证

在 Wordpress 中确认离开外部链接

locationManager:didEnterRegion:在没有位置更改的情况下触发