تعداد بازدید: 2204

cron job در وردپرس

مفهوم cron job در وردپرس یعنی انجام یه کار (job) به صورت سیکل زمانی (intreval) با زمان شروع مشخص(start time).

به طور مثال از شنبه ساعت ۰۰:۰۰ بامداد (زمان شروع) هر هفته (سیکل زمانی) ایمیلی با محتویات خاص ارسال بشه (انجام کار).

نکته : انجام عملیات cron job برعهده سرور می باشد ولی در وردپرس با استفاده از توابع زیادی می توان cron job ها را تعیین کرد.

مفاهیم مهم در cron job

کار (Event) : action که قراره یک تابع بهش قلاب بشه و در نهایت کاری رو انجام بده.

سیکل زمانی (interval) : بازه زمانی که قراره بعد از شروع این کار تکرار بشه ، مثلا هفتگی ، ماهانه ، سالانه.

زمان شروع (time for first task) : این کار که قراره به صورت یک سیکل زمانی اجرا بشه باید از یک زمان مشخصی استارت بخوره. زمان باید یکتا داده بشه مثلا شنبه ۲۱ می ۱۹۹۳ میلادی ساعت ۰۰ : ۰۰ بامداد اولین بار برای اجرا تابع .(خوب وقتی صحبت از یک زمان دقیق می کنیم منظورمون timestamp هست)

نکته : یک cron job در وردپرس یک بار ساخته میشه و یک بار هم پاک میشه . منظورم اینه که یک بار که ساخته شد حتی اگر تابعش رو هم از کدهاتون پاک کنید (دقت داشته باشید منظورم تابع register کردن cron هست نه تابعی که قراره کار رو انجام بده) اون چون یک بار register شده کارش رو انجام میده.

نکته : معمولا وقتی پلاگینی نوشته میشه در زمان فعال سازی (activation) پلاگین ، cron رو ثبت می کنیم و در زمان پاک شدن (uninstall) پلاگین cron را پاک میکنیم .

سیکل های زمانی برای cron job در وردپرس

همون طور که میدونید سیکل زمانی یا interval در برنامه نویسی بر حسب ثانیه تعیین میشه که حالا اگر به یه عدد خاصی برسه میشه گفت دقیقه ساعت روز هفته و ….

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

minute = 1 * 60 = 60
hourly = 1 * 60 * 60 = 3600
dayly = (1 * 60 * 60) * 24 = 86400
weekly = ((1 * 60 * 60) * 24) * 7 = 604800

یه سری سیکل زمانی (intervals) به صورت پیش فرض در وردپرس وجود داره :

  • hourly : هر ساعت
  • twicedaily : هر دو روز
  • daily : هر روز

اگر خواستید سیکل زمانی خاص خودتون رو با به موارد بالا اضافه کنید کافیه به cron_schedules یه تابع قلاب کنید و سیکل زمانی خودتون رو به لیست $schedules های پیش فرض اضافه کنید.

<?php
function add_postviews_interval($schedules) {
    $schedules['weekly'] = array(
        'interval' => 604800,
        'display' => __('Once Weekly')
    );
    return $schedules;
}
add_filter('cron_schedules', "add_postviews_interval");
  • interval : بازه زمانی بر حسب ثانیه
  • display : نام برای نمایش
  • weekly : همون index که در توابع ثبت cron قراره استفاده بشه که در این مثال weekly به معنای هفتگیه. (شما بر حسب نیازتون نامش رو تغییر بدید).

Scheduling WP Cron Events (ثبت یک cron job)

برای این که شما بخواهید تابع خودتون رو در زمان معین به اجرا در بیارید نیاز دارید تا یک Event بسازید (در وردپرس بهش Hook میگیم). دو تابع مهمی که در ساخت cron job در وردپرس ازش استفاده می کنیم :

  • wp_next_scheduled : اطلاع از وجود schedule event
  • wp_schedule_event : ثبت یک schedule event
  • wp_clear_scheduled_hook : پاک کردن schedule event

تابع wp_next_scheduled

استفاده این تابع برای اینه که بفهمیم cron قبلا با شناسه (یا همون hook یا Event) مورد نظر ثبت شده یا نه . خروجی این تابع در صورت وجود timestamp زمان بعدی اجرا هست و اگر هم وجود نداشته باشه FALSE بر میگردونه.

<?php $timestamp = wp_next_scheduled( $hook, $args ); ?>

آرگومان های این تابع :

  • hook : همون هوکی که در زمان ثبت cron job ساخته شده. hook حکم شناسه یک cron job رو در وردپرس داره.(اجباری)
  • args : آرگومان هایی که به این hook داده میشه.(اختیاری)

تابع wp_schedule_event

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

 <?php wp_schedule_event($timestamp, $recurrence, $hook, $args); ?>

آرگومان های این تابع :

  • timestamp : این مورد زمان اولین اجرای کار با فرمت timestamp هست.
  • recurrence : این همون سیکل زمانی هست که در بارش صحبت کردیم که میتونه از مقادیر پیش فرض وردپرس باشه یا موردی که شما ساختید. مثلا ‘hourly’ , ‘daily’
  • hook : مهم ترین قسمت کار همون hook که برای این cron ساخته میشه و شما با قلاب انداختن به این hook می تونید تابع خودتون رو در زمان بندی مورد نظر اجرا کنید.
  • args : آرگومان هایی که قراره به hook داده بشه. (اختیاری)

نکته : این تابع به صورت پیش فرض کاری رو انجام نمیده فقط زمان بندی رو ثبت می کنه . کار رو اون تابعی انجام میده که به این action مورد نظر قلاب بشه.

نکته : در زمانی که timestamp در این تابع به ثبت می کنید باید دقت داشته باشید که زمان را به وقت محلی وردپرس می دهید یا زمان بین المللی گرینویچ (که با ایران 4:30 دقیقه اختلاف دارد). اگر قصد دارید زمان شروع را به وقت محلی وردپرس بدهید از تابع get_gmt_from_date استفاده کنید. ساختار این تابع به شکل زیر است.

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

<?php get_gmt_from_date( $string, $format = 'Y-m-d H:i:s') ?>

ورودی این تابع شبیه به تابع strtotime در پی اچ پی می باشد. یعنی یک رشته به فرمت خاص نمایانگر تاریخ . خروجی این تابع هم تاریخ بر اساس فرمت ورودی (پارامتر دوم) هست که چون ما برای استفاده در تابع wp_schedule_event لازمش داریم باید U بدیم تا به ما timestamp رو برگردونه.

تابع wp_clear_scheduled_hook

این تابع برای غیر فعال کردن و یا پاک کردن event هست که در قالب یک action در تابع قبل ساخته شده بود می باشد. بعد از پاک شدن event با استفاده از این دیگر action یا همان hook وجود ندارد در نتیجه تابعی که به action قلاب شده بود نیز عمل نمی کند.

 <?php wp_clear_scheduled_hook( $hook, $args ); ?>

با استفاده از hook می تونیم زمانبدی رو پاک کنیم. این تابع معمولا در زمان پاک کردن پلاگین استفاده میشه. (register_uninstall_hook)

مثال کلی از استفاده cron job در وردپرس

جهت فعالسازی واقعه زمانبندی شده به همراه تابعی که قراره به اون hook بشه در زمان فعال سازی پلاگین :

<?php
register_activation_hook(__FILE__, 'my_activation');

function my_activation() {
    if (! wp_next_scheduled ( 'my_hourly_event' )) {
	wp_schedule_event(get_gmt_from_date("next sunday 00:02:00", "U"), 'hourly', 'my_hourly_event');
    }
}

add_action('my_hourly_event', 'do_this_hourly');

function do_this_hourly() {
	// do something every hour
}

جهت پاکسازی واقعه زمان بندی شده در زمان پاک کردن پلاگین :

<?php
register_deactivation_hook(__FILE__, 'my_deactivation');

function my_deactivation() {
	wp_clear_scheduled_hook('my_hourly_event');
}

 

مطالب مشابه

آموزش نکات و تکنیک های برنامه نویسی وردپرس

WP Comment

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

آموزش نکات و تکنیک های برنامه نویسی وردپرس

Administration Menus در وردپرس

برای پیاده سازی پنل های شخصی در محیط ادمین وردپرس نیاز هست که یک منو به همراه یک صفحه در وردپرس ایجاد کنیم. هر منو که...

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

یک دیدگاه برای cron job در وردپرس

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *