যদি আপনি WordPress plugin development করেন, তাহলে অনেক সময় এমন কিছু কাজ করতে হয় যেগুলো instantly run করানো ঠিক না। যেমন:
- Stripe payment processing
- Email sending
- API request
- Bulk import/export
- Daily automation
- Webhook processing
এই ধরনের কাজের জন্য WordPress এর default WP-Cron অনেক ক্ষেত্রে reliable না। এজন্য WooCommerce সহ বড় বড় plugin ব্যবহার করে Action Scheduler।
এই tutorial এ আমরা শিখবো:
- Action Scheduler কি
- কিভাবে install করতে হয়
as_enqueue_async_action()as_schedule_single_action()as_schedule_recurring_action()- Background task system
- Best practices
Action Scheduler কি?
Action Scheduler হলো WordPress এর একটি background job queue system।
এটা দিয়ে আপনি:
- Background task run করতে পারবেন
- Delayed job schedule করতে পারবেন
- Recurring cron তৈরি করতে পারবেন
- Failed job retry করতে পারবেন
WooCommerce internally এটা ব্যবহার করে:
- Email sending
- Subscription renewals
- Webhook delivery
- Order processing
Installation
WooCommerce ব্যবহার করলে
আলাদা করে কিছু install করতে হবে না।
কারণ WooCommerce এর ভিতরেই Action Scheduler built-in থাকে।
Check করতে পারেন:
if ( class_exists( 'ActionScheduler' ) ) {
// Available
}
Composer দিয়ে Install
composer require automattic/action-scheduler
1. Async Background Job
সবচেয়ে useful function:
as_enqueue_async_action()
এটা background এ task run করে।
Example
as_enqueue_async_action(
'my_async_task',
[ 'user_id' => 5 ],
'my-plugin'
);
Handler:
add_action( 'my_async_task', 'handle_my_async_task' );
function handle_my_async_task( $user_id ) {
error_log( 'Processing user: ' . $user_id );
}
এটা কিভাবে কাজ করে?
User page load করার পর:
- request শেষ হয়
- তারপর background এ task execute হয়
এজন্য website fast থাকে।
2. Single Scheduled Action
নির্দিষ্ট সময় পরে run করতে:
as_schedule_single_action(
time() + 300,
'send_reminder_email'
);
এখানে:
- 300 seconds পরে job run হবে
Example
add_action( 'send_reminder_email', function () {
wp_mail(
'admin@example.com',
'Reminder',
'This is reminder email.'
);
});
3. Recurring Cron Job
প্রতিদিন বা প্রতি ঘণ্টায় run করার জন্য।
Daily Cron Example
if ( ! as_next_scheduled_action( 'daily_backup' ) ) {
as_schedule_recurring_action(
time(),
DAY_IN_SECONDS,
'daily_backup'
);
}
Handler:
add_action( 'daily_backup', 'run_daily_backup' );
function run_daily_backup() {
error_log( 'Daily backup started' );
}
4. Duplicate Action Prevent করা
একই job multiple time schedule হওয়া prevent করতে:
if ( ! as_next_scheduled_action( 'my_hook' ) ) {
as_enqueue_async_action( 'my_hook' );
}
5. Arguments Pass করা
as_enqueue_async_action(
'charge_customer',
[
'user_id' => 10,
'amount' => 50,
]
);
Handler:
add_action(
'charge_customer',
function ( $user_id, $amount ) {
// Payment logic
},
10,
2
);
6. Failed Job Debugging
Admin Panel:
Tools → Scheduled Actions
এখানে দেখতে পারবেন:
- Pending jobs
- Completed jobs
- Failed jobs
7. Action Cancel করা
as_unschedule_all_actions( 'daily_backup' );
Specific:
as_unschedule_action(
'charge_customer',
[ 'user_id' => 5 ]
);
8. Real Use Case
WooCommerce checkout এর পরে webhook send:
add_action(
'woocommerce_checkout_order_processed',
function ( $order_id ) {
as_enqueue_async_action(
'send_order_webhook',
[ 'order_id' => $order_id ]
);
}
);
কেন Async ব্যবহার করা ভালো?
কারণ:
- Checkout fast থাকে
- API slow হলেও site hang হয় না
- Failed request retry করা যায়
Best Practices
✅ Small task queue করুন
✅ Large loop avoid করুন
✅ Duplicate check করুন
✅ Error logging রাখুন
✅ API timeout handle করুন
WP-Cron vs Action Scheduler
| Feature | WP-Cron | Action Scheduler |
|---|---|---|
| Reliable | ❌ | ✅ |
| Retry | ❌ | ✅ |
| Queue System | ❌ | ✅ |
| Debug UI | ❌ | ✅ |
| WooCommerce Compatible | ❌ | ✅ |
Conclusion
যদি আপনি:
- WooCommerce plugin
- Payment system
- API integration
- Automation system
- Queue processing
নিয়ে কাজ করেন, তাহলে Action Scheduler ব্যবহার করা উচিত।
বিশেষ করে:
as_enqueue_async_action()as_schedule_single_action()as_schedule_recurring_action()
এই তিনটি function সবচেয়ে বেশি ব্যবহার হয়।