web-dev-qa-db-ja.com

WordPressのメイン管理者のメールアドレスを通知および確認プロセスなしで変更する方法

ステージングサーバーに管理者の電子メールアドレスを変更するサイトを1つ作成しました。その時点でステージングサイトで何かをテストし、クライアントに電子メール(元の管理者の電子メール)を送信しないようにするため、メインの管理者の電子メールを変更します。

しかし、管理者のメールアドレスを変更すると、新しい管理者のメールアドレスへの確認リンクが表示されます。

確認メールのリンクをクリックするまで、管理者のメールアドレスは変更されません。

確認リンクをクリックすると、元の管理者は管理者のメール変更の通知を受け取ります。

WordPressで管理者メールの変更の通知と新しい管理者メールアドレスの確認リンクを無効にします。

どうやって?手伝っていただけませんか?このためのコードはありますか?

enter image description here

25
developerme

オプションテーブルのすべての設定を変更できる「シークレット」設定ページがあります。

URLを/options-general.phpから/options.phpに変更してアクセスします

82
valerio

置き換えようとしているのは、実際にはWordpress設定のメールであり、wpユーザーのメールではありません。それはデータベースのテーブルwp_optionsで直接変更できます。ここでoption_nameadmin_emailです

または、指定された更新クエリで:

UPDATE `wp_options` SET `option_value` = '[email protected]' WHERE `option_name` = 'admin_email';
8

注:ダンプを取得し、最初にローカルで試してください。実稼働環境でテストしないでください

DBによる変更

//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";

これもチェックしてください

3
Abdulla Nilam

Mysqlサーバーを入力する必要があります

次のクエリを実行します

UPDATE `wp_options` SET `option_value` = '[email protected]' WHERE `option_id` = 6;
1
sese smith

PhpMyAdminの使用がより簡単に

wp_options> admin_email

1
Eric Caudle

サードパーティのプラグインを使用せずに管理者のメールを変更する方法はいくつかあります。

また、admin_emailの他に、変更する必要がある別の値があります。 DBでadmin_email値を変更しても、new_admin_emailも変更しない限り、確認通知が残ります。

データベース経由の更新:

DB経由で直接オプションを更新する場合、変更が必要なオプションが2つあります:admin_emailnew_admin_email

UPDATE wp_options SET option_value = '[email protected]' WHERE 
option_name LIKE 'admin_email' 
OR 
option_name LIKE 'new_admin_email';

note:デフォルトでは、すべてのWordPressデータベースにはテーブルのwp_プレフィックスがありますが、変更できるため、チェックインwp-config.php$table_prefix値。

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', '[email protected]' );

そして

update_option( 'new_admin_email', '[email protected]' ); 

これらをadmin_initアクションコールバック内に配置します。

wp-cliによる更新:

管理者の電子メールを更新する別の方法は、wp-cli経由です(ターミナルsshにアクセスできる場合):

wp option update admin_email '[email protected]'

そして

wp option update new_admin_email '[email protected]'

wpオプションコマンドの詳細を参照してください:

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

1
niklaz

テーマ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 );
0
Rajnikant Das

このクエリを実行すると、確認なしでメールIDが変更されます

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

同じ問題が発生したため、確認リンク機能をロールバックするプラグインを作成しました。 .orgリポジトリからダウンロードできます。

送信メールなしで管理者メール設定を変更する

コードは次のとおりです。

<?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;
    }

}
0
John Dee