web-dev-qa-db-ja.com

デフォルトを上書きする WP マルチサイト通知Eメール

WP MSのデフォルトの通知メッセージをフックして上書きすることは可能ですか?送信されているメッセージは/wp-admin/user-new.phpにあります。

if ( is_multisite() ) {
    function admin_created_user_email( $text ) {
        /* translators: 1: Site name, 2: site URL, 3: role */
        return sprintf( __( 'Hi,
You\'ve been invited to join \'%1$s\' at
%2$s as a %3$s.
If you do not want to join this site please ignore
this email. This invitation will expire in a few days.

Please click the following link to activate your user account:
%%s' ), get_bloginfo('name'), site_url(), esc_html( $_REQUEST[ 'role' ] ) );
    }
    add_filter( 'wpmu_signup_user_notification_email', 'admin_created_user_email' );

    function admin_created_user_subject( $text ) {
        return "[" . get_bloginfo('name') . "] Your site invite";
    }
}

正しいフックを見つけて、remove_filter()を削除してから自分で追加できるようにすれば、それが可能になると思います。

function reset_admin_email(){
    remove_filter( 'wpmu_signup_user_notification_email', 'admin_created_user_email' );
    add_filter( 'wpmu_signup_user_notification_email', 'admin_created_user_email2', 1 );
}

私はこのページを読んでいたのですが アクションの一覧です/ hooks 私は結びつけることができますが、私はどれを使うべきか私にはわかりません(もしどれかがうまくいくなら)

誰かが私を正しい方向に向けるための経験がありますか?

ありがとう
レヴィ

5
Levi

これらを追加することで、マルチサイト通知メールを上書きすることができました。

remove_filter('wpmu_signup_user_notification_email','admin_created_user_email');
add_filter('wpmu_signup_user_notification_email',<function_name_here>);
add_filter('wpmu_signup_user_notification',<function_name_here>);
add_filter('wpmu_signup_user_notification_subject',<function_name_here>);

一番下に3つのフィルタ、つまり電子メール、通知、件名を追加すると、電子メールの内容と件名を上書きできます。

3
Aldous Wright

@ user2647は正しい道をたどっているようですが、これがより正しいと思います。

remove_action( 'wpmu_new_user', 'newuser_notify_siteadmin' );
add_action( 'wpmu_new_user', 'my_notification' );

function my_notification ($user_id) {
  // Make your custom notification here.
}
2
Graeme

/wp-admin/user-new.phpが実行されるのでremove_filterは効果がありません

add_filter('wpmu_signup_user_notification_email', admin_created_user_email);

plugins_loadedの後、毎回読み込まれます。

私はこれを使用して新しいフィルタを追加することで動作するようになりました  優先順位(高い数値)なので、デフォルトの優先順位(10)を持つadmin_created_user_emailの後に実行されます。

function reset_admin_email(){
    add_filter( 'wpmu_signup_user_notification_email', 'admin_created_user_email2', 11 );
}
2
Dylan Barlett

このようなことはうまくいくでしょうか。

if ( !function_exists('wp_new_user_notification') ) {
function wp_new_user_notification( $user_id, $plaintext_pass = '' ) {
    $user = new WP_User($user_id);

    $user_login = stripslashes($user->user_login);
    $user_email = stripslashes($user->user_email);
            $message = $user_login . " " . $user_email;

    wp_mail($user_email, sprintf(__('[%s] Your username and password'), get_option('blogname')), $message);

}
}
1
rocketman27

これらのEメールのほとんどのテキストは翻訳可能です。つまり、WPの gettext filterを利用することができます。オンラインで翻訳を実装する次の方法を見つけましたが、元のソースを見つけることができません。

まずフィルタフックを定義します。

add_filter('gettext', [new AddAction(), 'gqa_text_strings'], 20, 3);

それからあなたの翻訳機能:

 /**
 * Change a few text strings related to the login/registration process
 *
 * @link http://codex.wordpress.org/Plugin_API/Filter_Reference/gettext
 *
 * @param $translated_text
 * @param $text
 * @param $domain
 *
 * @return string
 */
function gqa_text_strings($translated_text, $text, $domain)
{
    switch ( $translated_text ) {
        case 'Get your own %s account in seconds' :
            $translated_text = __('Request access to %s', 'gqa');
            break;
        case 'We send your registration email to this address. (Double-check your email address before continuing.)' :
            $translated_text = __('', 'gqa');
            break;
        case 'But, before you can start using your new username, <strong>you must activate it</strong>.' :
            $translated_text = __('An email with login instructions has been sent to the address you provided.', 'gqa');
            break;
        case "Check your inbox at %s and click the link given." :
            $translated_text = __('Check your inbox at %s.', 'gqa');
            break;
        case 'If you do not activate your username within two days, you will have to sign up again.' :
            $translated_text = __('', 'gqa');
            break;
        // Subject line for new user registration email
        case 'New %1$s User: %2$s' :
            $translated_text = __('Your account information');
            break;
        // Error message when registering a new account with an already used username.
        case 'That username is currently reserved but may be available in a couple of days.' :
            $translated_text = __('A user with that username already exists. Do you already have an account? Please contact site administrators or try again.');
            break;
        // Error message when registering a new account with an already used email address.
        case 'That email address has already been used. Please check your inbox for an activation email. It will become available in a couple of days if you do nothing.' :
            $translated_text = __('That email address has already been assigned to an account. Do you already have an account? Please contact site administrators or try again');
            break;
    }

    return $translated_text;
}

文字列が __()関数 で囲まれていれば、その文字列は翻訳可能です。だからあなたの場合は、以下を追加します:

case 'Hi, You\'ve been invited to join \'%1$s\' at
%2$s as a %3$s. If you do not want to join this site please ignore
this email. This invitation will expire in a few days. Please click the following link to activate your user account: %%s' :
    $translated_text = __('Whatever you want the email to say', 'gqa');
    break;
0
badcrocodile

ディラン 正しい答えがありますが、詳しく説明します。

10よりも高い優先順位を使用して、デフォルトのフィルタの後に起動するフィルタを追加します。

add_filter( 'wpmu_signup_user_notification_email', 'wp_new_user_notification', 11 );

コンテンツの機能:

function wp_new_user_notification( $user_id, $plaintext_pass = '' ) {

            $user = new WP_User( $user_id );

            $user_login = stripslashes( $user->user_login );
            $user_email = stripslashes( $user->user_email );

            $message  = sprintf( __('New user registration on %s:'), get_option('blogname') ) . "\r\n\r\n";
            $message .= sprintf( __('Username: %s'), $user_login ) . "\r\n\r\n";
            $message .= sprintf( __('E-mail: %s'), $user_email ) . "\r\n";

            @wp_mail(
                get_option('admin_email'),
                sprintf(__('[%s] New User Registration'), get_option('blogname') ),
                $message
            );

            if ( empty( $plaintext_pass ) )
                return;

            $message  = __('Hi there,') . "\r\n\r\n";
            $message .= sprintf( __("Welcomeeee to %s! Here's how to log in:"), get_option('blogname')) . "\r\n\r\n";
            $message .= wp_login_url() . "\r\n";
            $message .= sprintf( __('Username: %s'), $user_login ) . "\r\n";
            $message .= sprintf( __('Password: %s'), $plaintext_pass ) . "\r\n\r\n";
            $message .= sprintf( __('If you have any problems, please contact me at %s.'), get_option('admin_email') ) . "\r\n\r\n";
            $message .= __('Adios!');

            wp_mail(
                $user_email,
                sprintf( __('[%s] Yourrrrrrr username and password'), get_option('blogname') ),
                $message
            );
        }
  • このコードは Codex exampleからコピーしたものです。
  • ここで直接 coreで参照

最後に mu-pluginsフォルダにドロップしますwp-content/mu-plugins

0
Wyck