Action scheduler - Affinite.io CZ

WP Cron a Action Scheduler jsou dva způsoby, jak ve WordPressu plánovat úlohy. První z nich je obsažený ve WordPressu a druhý je distribuován s WooCommerce.

O to com co je a jak funguje WP Cron jsem již psal dříve. Dnes se podíváme, jak funguje Action Scheduler.

Scheduled Actions

V případě, že používáte WooCommerce, mohli jste od jisté verze zaznamenat v Nástrojích novou položku nazvanou Scheduled actions.

WooCommerce ji používá na naplánování úloh, které chce v budoucnu provést. V některém z dalších článcích budu psát o lookup tabulkách produktů, v kterých jsou nově uložena data produktů.

Ta byla původně v postmeta tabulce a vývojáři WooCommerce se rozhodli, přesunout tato data do vlastní tabulky.

Určitě jste po aktualizaci zaznamenali upozornění, že je třeba provést aktualizaci databáze WooCommerce a když jste aktualizaci spustili, zobrazilo se info, že aktualizace bude probíhat na pozadí.

Pokud by jste se v tu chvíli podívali do Scheduled actions, viděli by jste seznam naplánovaných úloh, s aktualizacemi dat produktů, nastavených na dávky. Tím WooCommerce dosáhla toho, že přesun dat probíhal postupně a výkon e-shopu to nijak neovlivnilo.

Action Scheduler

Když si ve WooCommerce pluginu otevřete složku includes/libraries, najdete knihovnu scheduleru. Kromě toho, že je knihovna distribuována s Woo, můžete ji použít jako samostatnou knihovnu do svého pluginu, nebo jako plugin a ve vlastních pluginech, nebo šabloně jenom plánovat úlohy.

K čemu se dá scheduler využít? WooCommerce přes něj plánuje opakované platby, aktualizace stavu objednávek, e-maily, které se mají odeslat s nějakou prodlevou, nebo aktualizace databáze po updatu.

Instalace scheduleru

Scheduler je dostupný na GitHubu, kde si můžete stáhnout zip soubor s releasem, který potřebujete – https://github.com/woocommerce/action-scheduler/releases. Pak stačí aktivovat jako obyčejný WordPress plugin.

Další možností je vložit knihovnu do pluginu, nebo šablony. Knihovnu pak musíte v kódu inicializovat:

require_once( plugin_dir_path( __FILE__ ) . '/libraries/action-scheduler/action-scheduler.php' );

Protože action scheduler zaregistruje sám sebe do hooku plugins_loaded s prioritou 0, vy musíte zavěsit require souboru do plugins_loaded před prioritu 0, například -10 ( negativní priorita ).

Použití scheduleru

Použití je podobné, jako použití WP Cron úlohy. Kompletní přehled najdete zde https://actionscheduler.org/api/ , my si ukážeme příklad a naplánujeme si odeslání e-mailu za 10 minut od vytvoření tasku.

Nejprve zaregistrujeme úlohu:

as_schedule_single_action( time() + 600, 'musilda_scheduled_mail_action', array( 'message' => $message ) );

Tato funkce vytvoří task, který se provede jednou, někdy v budoucnu. Například as_schedule_reccuring_action vytváří opakované úlohy.

Funkce přijímá čtyři argumenty

  • $time – termín provedení úlohy
  • $hook – akci, do které zavěsíme callback
  • $args – hodnoty, které chceme předat do callbacku
  • $groups – zde nepoužijeme, jde jen o sdružování úloh do skupin

Zaregistrujeme hook s callbackem:

add_action( 'musilda_scheduled_mail_action', 'musilda_scheduled_mail', 10, 1 );

Vytvoříme callback:

function musilda_scheduled_mail( $message ){
         mail( 'musilekmail@seznam.cz', 'Scheduler test', $message );
     }

Celý kód:

function musilda_scheduled_mail( $message ){
        mail( 'musilekmail@seznam.cz', 'Scheduler test', $message );
}
add_action( 'musilda_scheduled_mail_action', 'musilda_scheduled_mail', 10, 1 );

$message = 'Test e-mailu.';
as_schedule_single_action( time() + 600, 'musilda_scheduled_mail_action', array( 'message' => $message ) );

Následně se nám úloha zobrazí ve Scheduled actions:

A do e-mailové schránky přijde e-mail:

Proč používat Action Scheduler?

První otázka která vás napadne, bude, proč to používat? Vždyť WordPress má WP Cron.

To je pravda, ale scheduler byl vyvinut s ohledem na výkon. Díky tomu, že jej používá WooCommerce, má grafické rozhraní, které WP Cron nemá a je určen k provádění množství náročných úloh, bez toho, aby to významně omezovalo chod webu.

Oproti běžnému WordPress webu, je e-shop poměrně rozsáhlý, nezřídka s deseti tisíci položkami, tisíci objednávkami a množstvím obrázků.

Action scheduler nespustí další úlohu pokud:

  • je paměť využita více než z 90ti %
  • by zpracování následujích tří úloh mělo překročit 30 vteřin požadovaného času

Zvýšení časového limitu

Scheduler umožňuje pomocí action_scheduler_queue_runner_time_limit zvýšit time limit, ale i tak jste omezení nastavením php na vašem serveru (hostingu).

Zvýšení délky dávky

Vy výchozím nastavení pouští scheduler dávky o délce 25 úloh. V případě, že víte, že vaše úlohy jsou drobného rázu, můžete zvýšit délku dávky pomocí action_scheduler_queue_runner_batch_size.

Také je k dispozici možnost spouštět souběžně více dávek, což v základu nelze. To ale může mít dopad na výkon vašeho webu. takže s tím opatrně.

Ukládání dat úloh

Věčným tématem WordPressu je jeho databáze a ukládání dat. Scheduler vychází z návrhu data storage WooCommerce 3.+, takže jsou všechna data ukládána do zvláštních tabulek a nemusíte mít starost se zaplňováním tabulek, jako jsou post, postmeta a options. Data storage třídy navíc umožňují přepsat umístění dat, takže si můžete vytvořit i vlastní tabulky, ale myslím si, že to je zbytečné.

Cart fragments ve WooCommerce
Cart fragments ve WooCommerce
26 Led, 2020
WordPress XML sitemap - brzy bez nutnosti pluginu
WordPress XML sitemap - brzy bez nutnosti pluginu
02 Úno, 2020

Komentáře nejsou povoleny.

Looking for something?