פוסטים מתוזמנים שפספסו זמן: סיבות, פתרון מיידי ותיקון השורש

פוסט שתוזמן לפרסום ולא יצא הוא תוצר של WP-Cron שלא רץ בזמן. כך מפרסמים מיד ומונעים שזה יחזור.

פוסט עם post_status='future' שזמן הפרסום שלו עבר אבל הוא לא הפך ל-publish נראה במסך "Posts" כ"Missed schedule". זוהי לא תקלה ב-WordPress עצמו - זוהי תוצאה כמעט ודאית של WP-Cron שלא רץ בזמן. הפוסט נשאר באוויר במצב ביניים, ויפורסם רק בפעם הבאה ש-WordPress יבדוק - אם בכלל.

למה זה משנה

פספוס פרסום בזמן הוא בעיה רצינית במספר תרחישים: קמפיין שיווקי שתוזמן ל-09:00 ביום שני אבל יוצא ב-12:00 - הקמפיין מאבד מומנטום, מודעות בפייסבוק/גוגל שמצביעות על URL לא מובן (פוסט עתידי לא נטען לציבור). הודעה מתואמת לתאריך - חברת ביטוח שמפרסמת מדריך לתאריך תחילת תקופת הביטוח השנתי, יום שלם אחורה זה אסון. בלוגי תוכן סדרתי - יום שני, רביעי, שישי. כשפוסט מפספס, כל לוח הזמנים נשבר. אמינות מערכת - אם פוסט אחד פספס, כל הפוסטים העתידיים בסיכון. אדמין שלא בודק, יקבל גילוי רק בעוד שבוע כשיגלה שלא פורסם כלום.

איך לזהות

גש ל-Posts > All Posts וסנן לפי "Scheduled". הסתכל על העמודה "Date" - אם זה כבר אחרי השעה הנוכחית והסטטוס עדיין "Scheduled" או "Missed schedule", הפוסט בעייתי. דרך WP-CLI:

wp post list --post_status=future --fields=ID,post_title,post_date

השווה post_date לזמן הנוכחי (date '+%Y-%m-%d %H:%M:%S'). RankPlus סורק את posts table וסופר רשומות עם post_status='future' AND post_date < NOW().

איך לתקן

  1. פרסום מיידי: סמן את כל הפוסטים שפספסו > Bulk actions > "Edit" > שנה Status ל-"Published" > Update.
  2. חלופה ב-WP-CLI:
    wp post update $(wp post list --post_status=future --post_date_query='{"before":"now"}' --field=ID) --post_status=publish
  3. פתרון זמני: התקן Scheduled Post Trigger או Missed Scheduled Posts Publisher (חינמיים). הם מנסים לפרסם פוסטים שפספסו בכל בקשת גולש - תיקון נקודתי בלי לפתור את הסיבה.
  4. פתרון השורש: עבור ל-system cron במקום WP-Cron הפנימי. ראה הביקורת wp_cron_status למדריך מלא. אחרי המעבר, הוסף ל-wp-config.php:
    define( 'DISABLE_WP_CRON', true );
    וב-cron של השרת:
    */5 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
  5. התקן WP Crontrol וודא ש-publish_future_post נמצא ברשימה ולא תקוע.
  6. בדוק שאין שגיאות PHP ב-wp-content/debug.log שמפילות את WP-Cron באמצע.
  7. וודא ש-timezone של האתר תואם לאזור שלך: Settings > General > Timezone. שעון לא נכון גורם ל-publish_future_post להיתקע אם post_date_gmt לא תואם.

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

  • שינוי post_date ידני ב-DB: עוקף את ה-hook ולא מפעיל הפניות, sitemap update וכדומה. עדיף Bulk Edit ב-wp-admin.
  • הסתמכות על תוסף Trigger בלי לתקן את הסיבה: זה תיקון פצוע. ברגע שיהיה תוסף נוסף שגורם ל-fatal, גם ה-trigger ייכשל.
  • בלבול בין UTC ל-local time: וורדפרס שומר post_date_gmt ב-UTC ו-post_date בזמן מקומי. אם timezone של האתר לא נכון, הפוסט עלול להופיע בעבר/בעתיד.
  • WP-Cron כבוי בלי system cron: DISABLE_WP_CRON=true בלי תחליף שרת = שום משימת רקע לא תרוץ לעולם. ודא שיש system cron פעיל לפני שמשביתים.

בדיקה לאחר תיקון

תזמן פוסט בדיקה לעוד 5-10 דקות, וחכה. הוא צריך לעבור ל-Published בדיוק בזמן (תוך דקה אחת מהזמן המתוזמן). הרץ wp post list --post_status=future וראה אם יש פוסטים שפספסו - לא צריך להיות. ב-RankPlus הסטטוס יחזור לירוק.

טיפ: תוסף WP Missed Schedule Posts כותב לוג כל פעם שמפעיל פוסט שפספס - זה מאפשר לך לעקוב מתי וכמה פעמים הבעיה חוזרת, גם אם תיקנת זמנית.