ステージングサーバーに管理者の電子メールアドレスを変更するサイトを1つ作成しました。その時点でステージングサイトで何かをテストし、クライアントに電子メール(元の管理者の電子メール)を送信しないようにするため、メインの管理者の電子メールを変更します。
しかし、管理者のメールアドレスを変更すると、新しい管理者のメールアドレスへの確認リンクが表示されます。
確認メールのリンクをクリックするまで、管理者のメールアドレスは変更されません。
確認リンクをクリックすると、元の管理者は管理者のメール変更の通知を受け取ります。
WordPressで管理者メールの変更の通知と新しい管理者メールアドレスの確認リンクを無効にします。
どうやって?手伝っていただけませんか?このためのコードはありますか?
オプションテーブルのすべての設定を変更できる「シークレット」設定ページがあります。
URLを/options-general.phpから/options.phpに変更してアクセスします
置き換えようとしているのは、実際にはWordpress設定のメールであり、wpユーザーのメールではありません。それはデータベースのテーブルwp_options
で直接変更できます。ここでoption_name
はadmin_email
です
または、指定された更新クエリで:
UPDATE `wp_options` SET `option_value` = '[email protected]' WHERE `option_name` = 'admin_email';
注:ダンプを取得し、最初にローカルで試してください。実稼働環境でテストしないでください
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";
Mysqlサーバーを入力する必要があります
次のクエリを実行します
UPDATE `wp_options` SET `option_value` = '[email protected]' WHERE `option_id` = 6;
PhpMyAdminの使用がより簡単に
wp_options> admin_email
サードパーティのプラグインを使用せずに管理者のメールを変更する方法はいくつかあります。
また、admin_emailの他に、変更する必要がある別の値があります。 DBでadmin_email
値を変更しても、new_admin_email
も変更しない限り、確認通知が残ります。
データベース経由の更新:
DB経由で直接オプションを更新する場合、変更が必要なオプションが2つあります:admin_email
とnew_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オプションコマンドの詳細を参照してください:
テーマ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 );
このクエリを実行すると、確認なしでメールIDが変更されます
UPDATE `wp_users` SET `user_email` = 'newemail' WHERE `user_email` = 'old_email';
同じ問題が発生したため、確認リンク機能をロールバックするプラグインを作成しました。 .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;
}
}