در این سری از آموزش وردپرس قصد داریم در ارتباط با آموزش زمان بندی رویداد ها در وردپرس برای شما بگوییم و آن را مورد بررسی قرار دهیم پس تا انتها با ما همراه باشید و مراحل را به درستی پیش بروید تا به نتیجه و سوال خود برسید.
برای مثال اگر شما یک توسعهدهنده افزونه وردپرس هستید، تقریباً امکان استفاده از Cron Job یونیکس برایتان وجود ندارد، چون ممکن است هر کسی با نحوه تنظیم Cron Job آشنا نباشد. خوشبختانه وردپرس یک سیستم قوی Cron Job داخلی دارد که به توسعهدهندگان این امکان را میدهد که در مدت مشخصی دستورات موردنظر را اجرا کنند. برای مثال هر روز، نسخه جدید پلاگین را چک کنند و …
زمانبندی رویدادها در وردپرس :
معرفی Cron Job
یکی از قابلیت های معروف که در سیستم های یونیکسی وجود دارد Cron Job است که کارایی این رویداد این است که دستورات مشخصی را در زمان خاص یا دوره ای خاص اجرا کنند یک مثالی می زنیم تا این موضوع کاملا روشن شود ، مثلا یک دستور در روز و در ساعت ۴ بعد از ظهر اجرا شود و نیز در هر ده دقیقه یک فایل دانلود شود این میتواند در حالت هایی بسیار مفید واقع شده و نیاز کاری را رفع نماید.
نکته ای که در اینجا خدمت شما باید ارائه کنیم این هستش که خیلی از هاستینگ ها امکان تنظیم رویداد ها روبه مشتریکن خودشان میدهند اما برعکس این قضیه نیز صادق هست و خیلی ها نیز امکان زمان بندی رویداد ها رو به مشتریک خود نمیدهند که شما باید تحقیق کوچکی در این زمینه انجام دهید.
هاستینگهای بسیاری این امکان را به مشتریان خود میدهند که بتوانند Cron Jobهای خود را تنظیم کنند. اما بسیاری از مواقع امکان استفاده از این Cron Jobها وجود ندارد.
برای مثال اگر شما یک توسعهدهنده افزونه وردپرس هستید، تقریباً امکان استفاده از Cron Job یونیکس برایتان وجود ندارد، چون ممکن است هر کسی با نحوه تنظیم Cron Job آشنا نباشد.
خوشبختانه وردپرس یک سیستم قوی Cron Job داخلی دارد که به توسعهدهندگان این امکان را میدهد که در مدت مشخصی دستورات موردنظر را اجرا کنند. برای مثال هر روز، نسخه جدید پلاگین را چک کنند و …
ابتدا به بررسی مزایای ان میپردازیم و سپس معایب آن را نیز مورد بررسی قرار میدهیم.
مزایا:
- این مورد هیچ بستگی به سیستم عامل سرور ندارد و تفاوتی ندارد که سیستم عامل سرور چیست.
- در این مورد امکان تغییر زمان و دوره Cron در هر زمان وجود دارد و شما میتوانید در هر زمان دلخواه که نیاز به تغییر بود آن را تغییر دهید
- و در نهایت مهمترین مزایای آن این است که برای کاربران مبتدی بسیار ساده است و آن ها نیز میتوانند به راحتی از آن استفاده کنند.
- و…
معایب :
- اولین مورد در معایب ان این است که سیستم Cron داخلی وردپرس به بازدید کاربران از وب سایت وردپرسی بستگی دارد. یعنی هر کاربری که سایت شما را باز میکند، وردپرس چک میکند که آیا زمان انجام وظیفه محولشده فرا رسیده یا خیر و در صورتی که این زمان فرا رسیده باشد آن کار را انجام میدهد و در صورتی که نرسیده باشد آن را صورت نمیدهد و نکته مهمی که در اینجا وجود دارد این است که در صورتی که سایت کم شما بازدید باشد، سیستم داخلی ممکن است به کار نیاید و اصلا برای شما هیچ استفاده ای نداشته باشد
- مورد بعدی در معایب این سیستم این است که ممکن است زمان انجام کار دقیق نباشد برای مثال شما ممکن است Cron را روی روز یکشنبه ساعت ۱۲:۰۰ تنظیم کنید، اما به دلیلی که در قسمت بالا گفته شد، ممکن است که وظیفه محولشده ساعت ۱۲:۱۰ یا حتی دیرتر روی دهد. البته اگر ساعت ۱۲:۰۱ بازدیدی از سایت انجام شود، وظیفه همان موقع اجرا میشود.که شما در اینصورت نمیتوانید روی آن حساب کنید که حتما در زمان شروهع کار کسی از وب سایت بازدید میکند که این کار آغاز شود و ممکن است اصلا کسی تا مدتی از وب سایت بازدید نکند
تکرار رویدادها به صورت سفارشی
همانطور که پیشتر اشاره شد، وردپرس پیشفرض از سه نوع برای تکرار رویدادها استفاده میکند:
- daily : روزانه (هر ۲۴ ساعت)
- twicedaily : دو بار در روز (هر ۱۲ ساعت)
- hourly : هر ساعت (هر ۶۰ دقیقه)
شاید شما نیاز به هر ۵ دقیقه یا هر یک ماه داشته باشید. کافیست که فاصله زمانی بین هر تکرار به ثانیه به وردپرس تحویل دهید. برای مثال هر پنج دقیقه به ثانیه برابر با ۵ * ۶۰ میشود یا هر ماه برابر ۶۰ * ۶۰ * ۲۴ * ۳۰ میشود. برای معرفی از فیلتر cron_schedules به صورت زیر استفاده میکنیم.
برای معرفی این زمان ها به وردپرس از فیلتر cron_schedules به صورت زیر استفاده میکنیم:
1 2 3 4 5 6 7 8 9 | add_filter( ‘cron_schedules’, ‘wp_parsi_custom_schedule’ ); function wp_parsi_custom_schedule( $ schedules ) { $ schedules[ ‘five_minutes’ ] = array( ‘interval’ => 5 * 60, ‘display’ => ‘Once five minutes’ ); return $ schedules; } |
همانطور که میبنید برای تعریف این زمانبندی رویدادها در وردپرس ، ابتدا یک عضو جدید به آرایه با کلید five_minutes اضافه میکنیم، سپس برای کلید interval آن، ۵ دقیقه را به ثانیه تعریف کردیم و برای display هم مقدار دلخواهی در نظر میگیریم.حالا شما دوستان عزیز در تابع wp_schedule_event میتوانید از five_minutes به جای daily یا hourly و … استفاده کنید تا رویداد شما هر پنج دقیقه اجرا شود.
حال در ادامه یک وظیفه ساده را به سیستم وردپرس برای اجرا محول میکنیم تا ببینیم روش کار به چه ترتیب است. کدهای زیر را میتوانید در functions.php قالب خود قرار داده و یا برای این منظور یک پلاگین جدا بنویسید.که انتخاب اینکار با شماست.
حالا چطور این کار را انجام دهیم شما تنها کافیست که بدانید آیا پیشتر این رویداد توسط وردپرس شناخته شده است یا خیر، در غیر این صورت، آن را به وردپرس معرفی میکنیم که برای این منظور شما میتوانید از هک وردپرس زیر استفاده کنید:
1 2 3 4 5 | add_action( ‘wp’, ‘wp_parsi_scheduled_event’ ); function wp_parsi_scheduled_event() { if ( ! wp_next_scheduled( ‘wp_parsi_daily_task’ ) ) wp_schedule_event( time(), ‘daily’, ‘wp_parsi_daily_task’ ); } |
در کد تابع wp_parsi_scheduled_event مشاهده میکنید، ابتدا با استفاده از این کد بررسی کردیم که آیا رویدادی با نام wp_parsi_daily_task قبلاً در وردپرس زمانبندی شده است یا خیر. در غیر این صورت یک رویداد زمانبندی ثبت کند. برای ثبت یک رویداد از تابع wp_schedule_event استفاده میکنیم.که در ادامه به صورت کامل به توضیح آن میپردازم.
در کد های بالا پارامتر هایی وجود دارد که شاید شما متوجه نشوید که این پارامتها چیست و چرا استفاده شده است ؟ در اینجا به برخی از آنها اشاره میکنیم. …
معرفی پارمترها
- start_time : این دستور در ابتدای یک رویداد نوشته می شود و برای شروع باید از این پارامتر استفاده کرد ،که مثلا در زمان تنظیمشده برای شروع این رویداد ابتدا دستورات اجرا میشود و در نوبت بعدی اجرا مطابق پارامتر دوم خواهد شد. مقدار این پارامتر باید بر حسب زمان یونیکسی باشد. برای مثال استفاده از تابع time زمان یونیکسی حال را برمیگرداند یعنی زمانی که درآن قرار داریم را برمیگرداند.
- recurrence : در مورد پارامتر دوم تنها برای زمان تکرار به کار می رود یعنی مثلا به طور پیشفرض وردپرس سه مقدار hourly، daily و twicedaily را داراست که برای این پارامتر قرار میدهد.
- hook : آخرید پارامتری که شما آن را می بینید به صورت مقابل است که نام رویداد زمانبندی شده و همچنین نام هکی که برای اجرای دستورات باید آن را استفاده کنیم است.
حالا برای مشخصکردن دستوراتی که باید اجرا شوند در این زمان بندی ، کافیست که یک تابع به wp_parsi_daily_task را قرار دهیم.
1 2 3 4 | add_action( ‘wp_parsi_daily_task’, ‘wp_parsi_func’ ); function wp_parsi_func() { // … code here … } |
نکته: پاکنکردن رویدادها در هنگام غیرفعالشدن افزونه یا پلاگین میتواند برای وب سایت بسیار مشکل زا شود و آن را به مرز خرابی بکشاند.برای جلوگیری از این مشکل این کد را استفاده کنید :
1 2 3 4 | function wp_parsi_remove_task() { if ( wp_next_scheduled( ‘wp_parsi_daily_task’ ) ) wp_clear_scheduled_hook( ‘wp_parsi_daily_task’ ); } |
سخن پایانی
همانطور که سیستم داخلی Cron وردپرس میتواند جان تازهای به اپلیکیشن وردپرسی شما ببخشد، همانطور هم میتواند سم کشندهای برای سرعت و پرفرمنس سایت باشد. از این رو، نکات زیر را برای رعایت در تعریف رویدادها، پیشنهاد میکنم:
- تا حد امکان کوئریها را از دیتابیس محدود کنید.
- فواصل زمانی بین اجرای رویدادها را بیشتر کنیم، برایمثال استفاده هر ۵ دقیقه یکبار ممکن است فشار زیادی به سرور بیاورد یا حتی باعث داونشدن آن شود.
- در هنگام دیاکتیوکردن افزونه یا پوسته، استفاده از wp_clear_schedule_hook را فراموش نکنید.
- سعی کنید بیش از ۲ فانکشن به هُک رویداد اضافه نکنید.
پایدار باشید.
این نوشته چندتا لایک داره؟
دیدگاه خود را بیان کنید