new-post1

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

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

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

Cron Job یا همان زمان بندی رویداد ها یکی از قابلیت‌های معروف سیستم‌های یونیکسی است که به کاربران آن ها این امکان را می‌دهد که دستورات مشخصی را در زمان خاص یا دوره‌ ای خاص اجرا کنند. برای مثال یک دستور هر روز در ساعت ۱۶ اجرا شود یا هر ۱۰ دقیقه یک‌بار یک فایل دانلود شود.که این میتواند در حالت هایی بسیار مفید واقع شده و نیاز کاری را رفع نماید.

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

برای مثال اگر شما یک توسعه‌دهنده افزونه وردپرس هستید، تقریباً امکان استفاده از Cron Job یونیکس برایتان وجود ندارد، چون ممکن است هر کسی با نحوه تنظیم Cron Job آشنا نباشد.پس باید کارتان در مورد ان باشد و یا در مورد آن اطلاعاتی داشته باشید تا بتوانید آن را راه اندازی نمائید.

خوشبختانه وردپرس یک سیستم قوی Cron Job داخلی دارد که به توسعه‌دهندگان این امکان را می‌دهد که در مدت مشخصی دستورات موردنظر را اجرا کنند. برای مثال هر روز، نسخه جدید پلاگین را چک کنند و کار هایی از این دست.اما باید در ابتدا توضیحی در مورد این Cron Job در وردپرس بدهم تا شما بهتر با آن و روش کار آن و ویژگی های آن آشنا شوید

اولین مورد از این توضیح مزایا و معایب سیستم Cron Job داخلی وردپرس نسبت به خویشاوند یونیکسی آن است که به صورت زیر است:
ابتدا به بررسی مزایای ان میپردازیم و سپس معایب آن را نیز مورد بررسی قرار میدهیم.

مزایا:

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

معایب:

  • اولین مورد در معایب ان این است که سیستم Cron داخلی وردپرس به بازدید کاربران از وب سایت وردپرسی بستگی دارد. یعنی هر کاربری که سایت شما را باز میکند، وردپرس چک می‌کند که آیا زمان انجام وظیفه محول‌شده فرا رسیده یا خیر و در صورتی که این زمان فرا رسیده باشد آن کار را انجام میدهد و در صورتی که نرسیده باشد آن را صورت نمیدهد و نکته مهمی که در اینجا وجود دارد این است که در صورتی که سایت کم شما بازدید باشد، سیستم داخلی ممکن است به کار نیاید و اصلا برای شما هیچ استفاده ای نداشته باشد
  • مورد بعدی در معایب این سیستم این است که ممکن است زمان انجام کار دقیق نباشد برای مثال شما ممکن است Cron را روی روز یکشنبه ساعت 12:00 تنظیم کنید، اما به دلیلی که در قسمت بالا گفته شد، ممکن است که وظیفه محول‌شده ساعت 12:10 یا حتی دیرتر روی دهد. البته اگر ساعت 12:01 بازدیدی از سایت انجام شود، وظیفه همان موقع اجرا می‌شود.که شما در اینصورت نمیتوانید روی آن حساب کنید که حتما در زمان شروهع کار کسی از وب سایت بازدید میکند که این کار آغاز شود و ممکن است اصلا کسی تا مدتی از وب سایت بازدید نکند

خب این هم از معایب و مزایای این سیسنم در وب سایت ها

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

خب دوستان عزیز برای ایجاد یک رویداد زمان‌بندی‌شده که با نام وظیفه پیشتر آن را معرفی کردیم، کافیست ابتدا بررسی کنیم که آیا پیشتر این رویداد توسط وردپرس شناخته شده است یا خیر، در غیر این صورت، آن را به وردپرس معرفی می‌کنیم که برای این منظور شما میتوانید از هک وردپرس زیر استفاده کنید:

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 : مورد دوم از پارامتر ها همانطور که میبینید پارامتر recurrence است که برای زمان تکرار این رویداد میباشد. به طور پیش‌فرض وردپرس سه مقدار hourly، daily و twicedaily را داراست که برای این پارامتر قرار میدهد. که در ادامه روش قرار دادن زمان دلخواه را بررسی میکنیم دوستان
  • hook : و در نهایت آخرین پارامتر هم به صورت مقابل است که نام رویداد زمان‌بندی‌ شده و همچنین نام هکی که برای اجرای دستورات باید آن را استفاده کنیم است.

خب دوستان عزیز حالا برای مشخص‌کردن دستوراتی که باید اجرا شوند در این زمان بندی ، کافیست که یک تابع به wp_parsi_daily_task را قرار دهیم:

add_action( ‘wp_parsi_daily_task’, ‘wp_parsi_func’ );
function wp_parsi_func() {
// … code here …
}

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

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

register_deactivation_hook( __FILE__, ‘wp_parsi_remove_task’ ); // be jaye __FILE__, sabet file asli plugin khod ra jaygozin konid
function wp_parsi_remove_task() {
if ( wp_next_scheduled( ‘wp_parsi_daily_task’ ) )
wp_clear_scheduled_hook( ‘wp_parsi_daily_task’ );
}