Created
May 27, 2021 00:41
-
-
Save fernandoacosta/c97c35294816f77d3c2da9dc4cc16470 to your computer and use it in GitHub Desktop.
extra triggers learndash
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
add_filter( 'learndash_notifications_email_content', function( $message, $notification_id ) { | |
if ( ! function_exists( 'WC' ) ) { | |
return $message; | |
} | |
// load the mailer class. | |
$mailer = WC()->mailer(); | |
// create a new email. | |
$email = new \WC_Email(); | |
$email_heading = get_post_meta( | |
$notification_id, | |
'_ld_notifications_notification_heading', | |
true | |
); | |
$email_heading = $email_heading ? $email_heading : 'Olá,'; | |
$message = apply_filters( 'woocommerce_mail_content', $email->style_inline( $mailer->wrap_message( $email_heading, $message ) ) ); | |
return $message; | |
}, 550, 2 ); | |
add_filter( 'learndash_notification_settings', function( $fields ) { | |
$fields['notification_heading'] = array( | |
'type' => 'text', | |
'title' => __( 'Cabeçalho do e-mail', 'learndash-notifications' ), | |
'help_text' => __( 'Título do e-mail enviado com template do WooCommerce.', 'learndash-notifications' ), | |
'hide' => 0, | |
'disabled' => 0, | |
'hide_on' => array(), | |
'default' => 'Olá,', | |
); | |
return $fields; | |
}); | |
add_filter( 'learndash_notifications_triggers', function( $triggers ) { | |
$triggers['new_lesson_added'] = 'Nova aula adicionada ao curso'; | |
return $triggers; | |
}); | |
add_action( 'save_post', 'abc_test_google', 99, 3 ); | |
function abc_test_google( $n_id, $post, $update ) | |
{ | |
error_log(print_r($post, true) . ' == é update? ' . wc_bool_to_string( $update )); | |
} | |
use LearnDash_Notification\Notification; | |
use LearnDash_Notification\Trigger; | |
class Minha_Classe_de_Trigger_Nova_Aula extends Trigger { | |
/** | |
* @var string | |
*/ | |
protected $trigger = 'new_lesson_added'; | |
public function monitor( $post_ID, $post, $update = false ) { | |
// não está pronto para notificar | |
if ( 'publish' !== $post->post_status || empty( $post->post_content ) ) { | |
$this->log( 'notificação inválida... post status ou conteúdo inválido.' ); | |
return; | |
} | |
if ( get_post_meta( $post_ID, '_notification_' . $this->trigger . '_sent', true ) ) { | |
$this->log( 'notificação já enviada...' ); | |
return; | |
} | |
update_post_meta( $post_ID, '_notification_' . $this->trigger . '_sent', time() ); | |
$course_id = get_post_meta( $post_ID, 'course_id', true ); | |
// nenhum curso definido | |
if ( ! $course_id ) { | |
$this->log( 'curso não definido. Lesson ID: ' . $post_ID ); | |
return; | |
} | |
$course = get_post( $course_id ); | |
if ( ! $course ) { | |
$this->log( 'Curso ' . $course_id . ' não existe. Lesson ID: ' . $post_ID ); | |
return; | |
} | |
$models = $this->get_notifications( $this->trigger ); | |
if ( empty( $models ) ) { | |
return; | |
} | |
$this->log( '==========Job start========' ); | |
$this->log( sprintf( 'Process %d notifications', count( $models ) ) ); | |
foreach ( $models as $model ) { | |
if ( $model->course_id !== 0 && absint( $course->ID ) !== $model->course_id ) { | |
continue; | |
} | |
if ( $model->lesson_id !== 0 && $model->lesson_id !== absint( $lesson->ID ) ) { | |
//this is not for me, as a lesson only belong to a course, so we don't need to check the course ID | |
continue; | |
} | |
$user_ids = $this->get_users( $course_id ); | |
$this->log( sprintf( 'Process %d users in this course', count( $user_ids ) ) ); | |
foreach ( $user_ids as $user_id ) { | |
$emails = $model->gather_emails( $user_id, $course->ID ); | |
$args = [ | |
'user_id' => $user_id, | |
'course_id' => $course->ID, | |
'lesson_id' => $post_ID, | |
]; | |
if ( absint( $model->delay ) ) { | |
$this->queue_use_db( $emails, $model, $args ); | |
} else { | |
$this->send( $emails, $model, $args ); | |
$this->log( 'Done, moving next if any' ); | |
} | |
} | |
} | |
$this->log( '==========Job end========' ); | |
} | |
/** | |
* A base point for monitoring the events | |
* @return void | |
*/ | |
function listen() { | |
add_action( 'save_post_sfwd-lessons', [ &$this, 'monitor' ], 10, 3 ); | |
add_action( 'leanrdash_notifications_send_delayed_email', [ &$this, 'send_db_delayed_email' ] ); | |
} | |
/** | |
* @param Notification $model | |
* @param $args | |
* | |
* @return bool | |
*/ | |
protected function can_send_delayed_email( Notification $model, $args ) { | |
return true; | |
} | |
/** | |
* | |
* @param $course_id | |
* | |
* @return array | |
*/ | |
protected function get_users( $course_id ) { | |
$query = learndash_get_users_for_course( $course_id ); | |
if ( $query instanceof \WP_User_Query ) { | |
return $query->get_results(); | |
} | |
return []; | |
} | |
} | |
add_action( 'init', 'registrar_a_classe_extra_do_notifications' ); | |
function registrar_a_classe_extra_do_notifications() { | |
$trigger = new Minha_Classe_de_Trigger_Nova_Aula(); | |
$trigger->listen(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment