it-swarm.com.de

Wie versende ich eine automatisierte Benutzer-Inaktivitäts-E-Mail?

Momentan arbeite ich an einer redaktionellen WordPress-Site, und ich möchte eine Funktion implementieren, die jemandem mit einer bestimmten Rolle (in diesem Fall Mitwirkender/Autor) eine E-Mail-Benachrichtigung sendet, wenn er keine erstellt hat/innerhalb eines festgelegten Zeitraums (z. B. 20 Tage) neue Inhalte veröffentlicht.

Ich habe jedoch keine Ahnung, was der beste Weg wäre, dies zu versuchen. Wäre es sinnvoll, so etwas mit Hooks zu versuchen? Ich bin jedoch besorgt darüber, dass diese Benachrichtigungen dann vom Laden der Site/des Dashboards oder von einer bestimmten Aktion abhängen, die diese Überprüfung auslösen würde.

2
Schalk Venter

Ihre Frage besteht aus drei Hauptteilen:

  1. Protokollieren Sie die letzte Anmeldezeit des Benutzers
  2. Planen Sie ein Cron-Ereignis
  3. Senden Sie eine E-Mail, wenn sich Mitwirkende und Autoren nicht innerhalb von 20 Tagen angemeldet haben

Der erste Schritt ist das Hinzufügen von Benutzer-Metas, um die letzte Anmeldung nachzuverfolgen. WordPress protokolliert nicht das letzte Mal, wenn sich ein Benutzer anmeldet, daher müssen wir dies manuell tun.

//* Add action on login to update the last_login user meta
add_action( 'wp_login', 'wpse_207422_user_last_login', 10, 2 );
function wpse_207422_user_last_login( $user_login, $user ) {
  update_user_meta( $user->ID, 'last_login', time() );
}

Als nächstes prüfen wir, ob unser Event geplant ist und wenn nicht, planen wir es. Dies sollte nur einmal ausgeführt werden, aber Sie wissen nie, ein anderes Plugin könnte es versehentlich deaktivieren.

//* Schedule a daily cron event
if( ! wp_next_scheduled( 'wpse_207422_inactivity_reminder' ) ) {
  wp_schedule_event( time(), 'daily', 'wpse_207422_inactivity_reminder' );
}

Fügen Sie abschließend eine Aktion für unser Cron-Ereignis hinzu. Der Rückruf führt eine Benutzerabfrage durch, die auf Mitwirkende und Autoren sowie den Metawert last_login abzielt. Der Vergleich stellt sicher, dass das last_login älter als 20 Tage ist.

//* Add action to daily cron event
add_action( 'wpse_207422_inactivity_reminder', 'wpse_207422_inactivity_reminder' );
function wpse_207422_inactivity_reminder() {
  //* Get the contributors and authors who haven't logged in in 20 days
  $users = new \WP_User_Query( [
    'role'         => [ 'contributor', 'author', ],
    'meta_key'     => 'last_login',
    'meta_value'   => strtotime( '-20 days' ),
    'meta_compare' => '<',
  ] );
  foreach( $users->get_results() as $user ) {
    wp_mail(
      $user->user_email,
      __( 'Inactivity Notice', 'wpse-207422' ),
      __( 'We notice you have not logged in for 20 days.' ,'wpse-207422' )
    );
  }
}
2
Nathan Johnson