سایر بخش های سری آموزشی " ایجاد افزونه وردپرس "

زمان بندی عملیات برای محدوده زمانی معین

برای اینکه عملیات زمان بندی شده اجرا شود لازم است که یک قلاب (Hook) سفارشی ایجاد کرده و مشخص کنیم که باید کدام تابع اجرا شود.

این گام بسیار مهم بوده و اگر فراموش کنید آن را انجام دهید، عملیات مشخص شده اجرا نخواهد شد.

در کد زیر ما این قلاب را ایجاد کرده ایم. پارامتر اول نام قلاب، و پارامتر دوم نام تابعی است که فراخوانی خواهد شد.

add_action( 'bl_cron_hook', 'bl_cron_exec' );

 

حال این قلاب را باید برای WP-Cron مشخص کنیم. برای این منظور از تابع wp_next_scheduled استفاده می شود. این تابع تنها یک پارامتر را قبول می کند و آن هم نام قلاب است. این تابع یک رشته که شامل برچسب زمان (timestamp)  جهت اجرای بعدی کرون است را بازخواهد گرداند و یا مقدار false بازگشت داده خواهد شد که به معنای زمان بندی نشدن عملیات است.

این تابع به شکل زیر استفاده می شود:

wp_next_scheduled( 'bl_cron_hook' )

 

برای اینکه بتوان عملیات را برای یک محدود زمانی معین زمان بندی کرد از تابع wp_schedule_event() استفاده می شود. این تابع به سه پارامتر نیاز دارد. این پارامترها به شرح زیر است:

  1. $timestamp – زمان اولین اجرای عملیات براساس برچسب زمانی یونیکس (UNIX timestamp)
  2. $recurrence – مقدار وقفه براساس ثانیه
  3. $hook – نام قلاب سفارشی

ما از یک وقفه ۵ ثانیه ای برای قلاب سفارشی مان استفاده کردیم که در نتیجه مقادیر این تابع به صورت زیر مشخص شده است:

wp_schedule_event( time(), '5seconds', 'bl_cron_hook' );

 

البته قبل از این لازم است که مطمئن شویم این عملیات از پیش زمان بندی نشده باشد. به همین منظور کد کامل به صورت زیر خواهد بود:

if( !wp_next_scheduled( 'bl_cron_hook' ) ) {
    wp_schedule_event( time(), '5seconds', 'bl_cron_hook' );
}

 

لغو زمان بندی عملیات

در صورتی که دیگر نیازی به اجرای عملیات زمان بندی شده ندارید، می توانید با استفاده از تابع wp_unschedule_event() آن ها را لغو کنید. این تابع دو پارامتر را قبول می کند:

  1. $timestamp – زمان بعدی اجرای عملیات
  2. $hook – نام قلاب سفارشی

از آنجا که این تابع از زمان بعدی اجرا آگاه نیست، از تابع wp_next_scheduled برای بدست آوردن این زمان استفاده می کنیم.

ترکیب این تابع به صورت زیر استفاده می شود:

$timestamp = wp_next_scheduled( 'bl_cron_hook' );
wp_unschedule_event($timestamp, 'bl_cron_hook' );

 

هر زمان که به اجرای عملیات زمان بندی شده نیازی نبود، مهم است که آنها را غیرفعال کرد تا وردپرس از اجرای آنها خوددکاری کند. یکی از موارد مهم که باید به خاطر داشت، عملیات زمان بندی شده توسط افزونه ها است.

به عبارتی در برخی از افزونه ها پس از اینکه آنها را غیرفعال کنید عملیات همچنان در سیستم وردپرس مانده و اجرا خواهند شد که یک مشکل محسوب می شود و اگر با چنین افزونه هایی مواجه شدید، بهتر است که به نویسنده آن افزونه اطلاع دهید تا مشکل را برطرف کرده و بروزرسانی جدید منتشر کند.

وردپرس این امکان را فراهم کرده است که توسعه دهندگان با استفاده از تابع register_deactivation_hook() توابع افزونه هایشان را در حالت غیرفعال نیز به اجرا در آورند. استفاده از آن خیلی آسان بوده و به شکل زیر به کار گرفته می شود:

register_deactivation_hook( __FILE__, 'bl_deactivate' );
 
function bl_deactivate() {
   $timestamp = wp_next_scheduled( 'bl_cron_hook' );
   wp_unschedule_event($timestamp, 'bl_cron_hook' );
}