web-dev-qa-db-fra.com

Comment écrire un plugin pour ajouter des utilisateurs à une liste de diffusion

Je gère un blog multi-sites avec environ 300 sites.

J'ai une idée que je veux écrire un plugin afin d'ajouter tous les administrateurs de blogs à une liste de diffusion MailMan. Je veux juste des administrateurs cependant, je ne veux pas ajouter d'éditeurs et d'abonnés à cette liste de courrier électronique.

Je veux capturer le cas où un administrateur de blog a été affecté. J'enverrai ensuite un courrier électronique à l'adresse électronique d'abonnement de ma liste de diffusion pour ajouter automatiquement la personne.

Alors je me demandais quel crochet devrais-je utiliser? Je pense que je veux envoyer un email chaque fois qu'une personne est définie en tant qu'administrateur. Peu m'importe s'ils sont supprimés en tant qu'administrateur.

1
jeph perro

Vous seriez accroché à profile_update et user_register. Commencez par vérifier s'il s'agit d'un nouvel utilisateur et s'il s'agit d'un administrateur/éditeur.

Puis envoyez le mail. Même récit avec la mise à jour de l'utilisateur: voir si le rôle a changé et si le nouveau rôle est admin ou editor.

<?php
add_action( 'profile_update', 'wpse33949_profile_update' );
add_action( 'user_register', 'wpse33949_profile_update' );
function wpse33949_profile_update( $user_id, $old_user_data = false )
{
    // get the updated user data
    $userdata = get_userdata( $user_id );

    // whatever you need to send here
    $message = "Sign up for my email!";
    $subject = "Mailing List";

    if( ! $old_user_data && in_array( $userdata->user_role, array( 'editor', 'administrator' ) ) )
    {
        // we're inserting a new user...
        wp_mail( $userdata->user_email, $subject, $message );
    }
    elseif( in_array( $userdata->user_role, array( 'editor', 'administrator' ) ) && $userdata->user_role != $old_user_data->user_role )
    {
        // We're updating the role of an existing user, make sure they're 
        // becoming an admin or editor, then send the message.
        wp_mail( $userdata->user_email, $subject, $message );
    }
}

Ce qui précède n'a pas été testé. Copiez et collez avec prudence. Je voulais juste vous lancer.

2
chrisguitarguy