הוספת תדירות Cron מותאמת בוורדפרס

ליבת וורדפרס מגיעה עם ארבע תדירויות ל-WP-Cron: hourly, twicedaily, daily ו-weekly. אם אתם צריכים תדירות אחרת (למשל כל 5 דקות), הגדירו תדירות מותאמת עם הפילטר cron_schedules, ורק לאחר מכן תזמנו את האירוע עם wp_schedule_event().

הסדר חשוב. התדירות המותאמת חייבת להיות קיימת לפני שאתם מתזמנים אירוע שמשתמש בה, אחרת וורדפרס תדחה את האירוע.

הוספת תדירות Cron מותאמת

הוסיפו את הקוד הבא לקובץ functions.php של תבנית הבת שלכם או לתוסף. הוא רושם תדירות של 5 דקות, מתזמן באמצעותה אירוע חוזר אחד ומחבר אליו את המשימה.

// 1. Register the interval.
add_filter( 'cron_schedules', function ( $schedules ) {
	$schedules['every_five_minutes'] = array(
		'interval' => 5 * MINUTE_IN_SECONDS,
		'display'  => 'Every 5 Minutes',
	);
	return $schedules;
} );

// 2. Schedule the event once, if it isn't scheduled yet.
add_action( 'init', function () {
	if ( ! wp_next_scheduled( 'my_custom_cron_event' ) ) {
		wp_schedule_event( time(), 'every_five_minutes', 'my_custom_cron_event' );
	}
} );

// 3. The task that runs on each interval.
add_action( 'my_custom_cron_event', function () {
	// Your code here.
} );

כיצד זה עובד

הפילטר cron_schedules מאפשר לכם להוסיף רשומות לרשימת התדירויות. כל רשומה צריכה מפתח ייחודי, interval בשניות ותווית display שמוצגת בכלים כמו WP-CLI.

wp_schedule_event( $timestamp, $recurrence, $hook ) שומרת את האירוע. ההרצה הראשונה מתבצעת ב-$timestamp, ולאחר מכן בכל פעם שהתדירות שהגדרתם חולפת. הבדיקה wp_next_scheduled() מונעת יצירה של אירוע כפול בכל טעינת עמוד.

כשמגיע זמנו של האירוע, וורדפרס מפעילה את שם ההוק שהעברתם, כך שכל פונקציה שחיברתם אליו עם add_action() תרוץ. לרענון על actions ופילטרים, הציצו בפוסט הוקים ופילטרים בוורדפרס.

תדירויות ה-Cron המובנות בוורדפרס

התדירויות הבאות זמינות בלי להוסיף שום פילטר. התדירות weekly נוספה בוורדפרס 5.4.

מפתח תדירות (בשניות) שם תצוגה
hourly 3600 Once Hourly
twicedaily 43200 Twice Daily
daily 86400 Once Daily
weekly 604800 Once Weekly

כלומר, למשימה שבועית בוורדפרס 5.4 ומעלה, ותרו על הפילטר והעבירו ישירות את 'weekly', בדיוק כמו בניקוי שבועי של transients שפג תוקפם. שימו לב שגם אי אפשר להגדיר מחדש את ארבעת המפתחות הללו, מכיוון שברירות המחדל של הליבה גוברות על רשומות בפילטר עם אותו שם.

טעויות נפוצות

רוב הבעיות ב-WP-Cron עם תדירויות מותאמות נובעות מאחת הטעויות הבאות.

  • תזמון לפני שהפילטר קיים. אם התדירות אינה רשומה ברגע ש-wp_schedule_event() רצה, הפונקציה מחזירה false (או WP_Error עם הקוד invalid_schedule כאשר אתם מעבירים true כארגומנט החמישי).
  • החלפת מפתח התדירות של האירוע. אם תשנו את 'every_five_minutes' בקריאה ל-wp_schedule_event(), האירוע הקיים ישמור על התדירות הישנה שלו, מכיוון ש-wp_next_scheduled() עדיין מוצאת אותו. הריצו פעם אחת את wp_clear_scheduled_hook( 'my_custom_cron_event' ) ותנו לקוד לתזמן אותו מחדש.
  • אי ניקוי בסיום. בתוסף, נקו את ההוק בזמן ההשבתה עם register_deactivation_hook(), כדי שהאירוע לא ימשיך לרוץ לשווא.
  • ציפייה לתזמון מדויק. WP-Cron רץ רק כשמישהו מבקר באתר, כך שמשימה של 5 דקות באתר עם מעט תנועה תרוץ באיחור.

לתזמון אמין, הגדירו את DISABLE_WP_CRON כ-true והפעילו את ה-cron מהשרת. במילים אחרות, בטלו את WP-Cron והשתמשו ב-cron job אמיתי בשרת.

כדי לוודא שהתדירות והאירוע נרשמו, הריצו את פקודות ה-WP-CLI הבאות:

wp cron schedule list
wp cron event list

רשימת הפרמטרים המלאה נמצאת בתיעוד של wp_schedule_event().

שאלות נפוצות

הנה כמה שאלות נפוצות על תדירויות WP-Cron מותאמות:

מהן תדירויות ה-Cron המובנות בוורדפרס?
hourly, twicedaily, daily ו-weekly. התדירות weekly קיימת החל מוורדפרס 5.4, ולכן מדריכים ישנים מציגים רק שלוש.
האם חובה להוסיף את הפילטר cron_schedules לפני wp_schedule_event()?
כן. wp_schedule_event() בודקת את התדירות מול התדירויות הרשומות ברגע שהיא רצה. אם הפילטר שלכם עוד לא מחובר, האירוע לא יתוזמן.
למה אירוע ה-Cron המותאם שלי לא רץ בזמן?
WP-Cron מופעל על ידי ביקורים בעמודים ולא לפי השעון. באתרים עם מעט תנועה, בטלו אותו עם DISABLE_WP_CRON וקראו ל-wp-cron.php או ל-wp cron event run --due-now מתוך cron job בשרת.
כיצד מסירים אירוע Cron מתוזמן?
קראו ל-wp_clear_scheduled_hook( 'my_custom_cron_event' ), או הריצו wp cron event delete my_custom_cron_event עם WP-CLI. הסירו גם את קוד התזמון, אחרת הוא יוסיף את האירוע בחזרה בטעינת העמוד הבאה.
דיון ותגובות
[  0 תגובות  ]

השאירו תגובה

הוסיפו קוד באמצעות הכפתורים מטה. למשל, בכדי להוסיף PHP לחצו על הכפתור PHP והוסיפו את הקוד בתוך השורטקוד. מצאתם שגיאה בפוסט? עדכנו אותנו...