Pro vývojáře
Jak modul funguje
Section titled “Jak modul funguje”Modul přesměruje WooCommerce e-maily do fronty Action Scheduleru pomocí filtru woocommerce_mail_callback:
add_filter( 'woocommerce_mail_callback', function() { return [ $this, 'add_job_to_queue' ];} );Proces odesílání
Section titled “Proces odesílání”- Zachycení e-mailu - Modul zachytí volání
wp_mail() - Uložení do fronty - Parametry se uloží do
wp_options - Naplánování akce - Action Scheduler naplánuje okamžité odeslání
- Asynchronní odeslání - Cron spustí odeslání
Action Scheduler
Section titled “Action Scheduler”Akce pro odesílání
Section titled “Akce pro odesílání”// Akce spouštěná při odesílání e-mailudo_action( 'wpify_send_email', $hash );Sledování fronty
Section titled “Sledování fronty”Frontu e-mailů můžete sledovat v Nástroje → Scheduled Actions:
- Akce:
wpify_send_email - Stav: Pending / Complete / Failed
Struktura dat
Section titled “Struktura dat”Uložení parametrů e-mailu
Section titled “Uložení parametrů e-mailu”// Parametry se ukládají jako option s hash klíčem$args = [ $to, $subject, $message, $headers, $attachments ];$hash = md5( json_encode( $args ) );update_option( $hash, $args );Načtení a smazání
Section titled “Načtení a smazání”// Při odesílání$args = get_option( $hash );delete_option( $hash ); // Po úspěšném načteníPříklad: Sledování odeslaných e-mailů
Section titled “Příklad: Sledování odeslaných e-mailů”add_action( 'wpify_send_email', function( $hash ) { $args = get_option( $hash );
if ( $args ) { error_log( sprintf( 'Odesílám e-mail na: %s, Předmět: %s', $args[0], // to $args[1] // subject ) ); }}, 5 ); // Priorita před modulemPříklad: Vlastní zpracování
Section titled “Příklad: Vlastní zpracování”add_action( 'wpify_send_email', function( $hash ) { $args = get_option( $hash );
if ( ! $args ) { return; }
// Vlastní logika před odesláním list( $to, $subject, $message, $headers, $attachments ) = $args;
// Například logování do vlastní tabulky global $wpdb; $wpdb->insert( $wpdb->prefix . 'email_log', [ 'to_email' => $to, 'subject' => $subject, 'sent_at' => current_time( 'mysql' ), ] );}, 5 );Externí cron
Section titled “Externí cron”Pokud používáte DISABLE_WP_CRON, nastavte externí cron:
# Každou minutu* * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1Nebo pomocí WP-CLI:
* * * * * cd /path/to/wordpress && wp cron event run --due-now > /dev/null 2>&1Action Scheduler vs WP Cron
Section titled “Action Scheduler vs WP Cron”Modul využívá Action Scheduler (součást WooCommerce), který je spolehlivější než standardní WP Cron:
| Vlastnost | WP Cron | Action Scheduler |
|---|---|---|
| Spouštění | Při návštěvě stránky | Při návštěvě + CLI |
| Logování | Ne | Ano |
| Správa | Omezená | Plná |
| Škálovatelnost | Nízká | Vysoká |