تخطَّ إلى المحتوى
مشكلات ووردبريس

تشخيص Missed Schedule في ووردبريس: رصد حدث WP-Cron متأخر وحدود الاختبار


حددت موعدا لنشر مقال، ثم مر الوقت وبقيت حالته «فات موعد النشر» أو Missed Schedule؟ قد يكون المقال محفوظا بشكل سليم، لكن المهمة المسؤولة عن نشره لم تعمل في موعدها. سنراجع الوقت وإعدادات المهام، ثم نوضح اختبارا صغيرا يساعدك على معرفة السبب.

WP-Cron هو نظام ووردبريس لتشغيل مهام مثل النشر المجدول. في وضعه المعتاد يعتمد تشغيل المهام المستحقة على طلبات تصل إلى الموقع، وليس ساعة مستقلة تعمل دائما. لذلك قد تحتاج المواقع قليلة الزيارات إلى جدولة من الاستضافة.

ثلاثة أسئلة قبل تثبيت إضافة

تحديث 5 سبتمبر 2026: يتضمن الدليل الآن اختبار نشر فعلي لمقال مجدول داخل مختبر منفصل، مع مقارنة الحالة قبل تشغيل WP-Cron وبعده. الصورة التاريخية تخص اختبار الرصد الأقدم؛ والنتيجة الجديدة موثقة في الجدول أدناه.

  1. هل يوجد الحدث أصلا؟ إذا لم يوجد فقد تكون الإضافة أو عملية الحفظ لم تسجله.
  2. هل موعده محسوب بالمنطقة الزمنية الصحيحة؟ قارن توقيت ووردبريس بتوقيت الخادم.
  3. هل يستطيع ووردبريس بدء تشغيل المهام وإرسال الطلبات إلى نفسه؟ وجود مهمة في القائمة لا يعني أنها نفذت.

إضافة تعيد نشر الأحداث المتأخرة قد تعالج المقال بعد وقوع المشكلة، لكنها لا تصلح جدارا ناريا يمنع كل المهام. قبل الاعتماد عليها افحص «صحة الموقع»، سجل Cron، وأي تعريف مثل DISABLE_WP_CRON. إذا كان التعريف true فيجب أن تكون هناك مهمة Cron حقيقية من الاستضافة؛ تعطيل الطريقتين معا يوقف الجدولة.

اختبار النشر في نسخة تجريبية

في نسخة تجريبية غير عامة، أنشئ مسودة بعنوان واضح مثل «اختبار Cron» وجدولها بعد عشر دقائق. لا تستخدم مقالا حقيقيا ولا تغير الساعة أثناء الاختبار. افتح الموقع من نافذة خاصة بعد الموعد، ثم راقب الحالة. إذا نشر، اختبر موعدا أطول لأن بعض المشاكل تظهر بعد خمول طويل. إذا لم ينشر، سجل الحدث والوقت قبل الضغط على «نشر الآن» حتى لا تمحو الدليل.

متى نستخدم Cron الخادم؟

الموقع الذي يحتاج مواعيد دقيقة ولا يحصل على زيارات ثابتة يستفيد من Cron حقيقي يستدعي wp-cron.php وفق جدول معروف. لا تكرر الاستدعاء كل دقيقة دون حاجة، ولا تترك WP-Cron التلقائي يعمل بالتوازي إن أوصت الاستضافة بتعطيله. اطلب منها المسار الصحيح وسجل التنفيذ، ثم اختبر حدثا واحدا. راقب نجاح النشر في الموقع المنشور بصورة مستقلة؛ فاختبار المختبر لا يثبت التزام مهمة الاستضافة بمواعيدها.

صلة الخطأ بالمهلة

إذا ظهر cURL 28 في الوقت نفسه، استخدم اختبار REST وLoopback. أما إذا كان Loopback سليما وبعض أحداث إضافة واحدة فقط تتأخر، فراجع سجل الإضافة وAction Scheduler الخاص بها.

تجربة جديدة: من تأخر المقال إلى نشره بواسطة WP-Cron

تاريخ التنفيذ: 5 سبتمبر 2026. مختبر منفصل باستخدام WordPress Playground CLI 3.1.52؛ ووردبريس 7.1؛ PHP 8.3.32؛ قاعدة SQLite. لم تُجر هذه التجربة على استضافة الموقع المنشور.

في التجربة السابقة رصدنا حدثا متأخرا ثم أزلناه يدويا. أعدنا الاختبار هذه المرة بمقال فعلي، وتركنا ووردبريس ينفذ حدث النشر نفسه حتى نتحقق من النتيجة داخل قاعدة البيانات.

  1. عطّلنا الاستدعاء التلقائي للمهام في المختبر فقط عبر DISABLE_WP_CRON=true، لمحاكاة غياب المشغّل.
  2. أنشأنا مقالا بحالة future وموعد بعد 75 ثانية، وتحققنا من تسجيل حدث publish_future_post له.
  3. انتظرنا إلى ما بعد الموعد بثلاث ثوان. بقي المقال بحالة future والحدث مستحقا، لأن التشغيل التلقائي معطل عمدا.
  4. شغّلنا مدخل ووردبريس الأصلي wp-cron.php في المختبر، ثم قرأنا حالة المقال والحدث من جديد.
الفحص بعد الموعد وقبل التشغيل بعد تشغيل WP-Cron
حالة المقال نفسه future publish
حدث النشر الخاص به موجود ومستحق غير موجود بعد التنفيذ
مدخل التشغيل لم يُستدع استجابة 200 بلا خطأ PHP مسجل

النتيجة: نُشر المقال بواسطة مهمة ووردبريس بعد تشغيلها، دون الضغط على «نشر» ودون حذف حدثه يدويا. هذا يثبت حالة غياب المشغّل في المختبر؛ لا يثبت أن كل تعطل جدولة سببه قلة الزيارات أو أن Cron لدى شركة استضافة محددة مضبوط.

كيف تتحقق من الإصلاح في بيئتك؟

استخدم نسخة اختبار وجدول مقالا بعد دقيقتين على الأقل. سجل حالته بعد الموعد، ثم نفذ وسيلة التشغيل التي اخترتها: زيارة الموقع مع تفعيل WP-Cron المعتاد، أو مهمة الخادم التي أعدها دعم الاستضافة. النجاح هو انتقال المقال نفسه إلى «منشور» في الموعد المتوقع، وليس اختفاء تنبيه أو إزالة حدث من القائمة. كرر الفحص بعد فترة خمول.

إن كان WP-CLI متاحا، يفحص wp cron test قدرة ووردبريس على بدء المهام، ويعرض wp cron event list جدولها. أما wp cron event run --due-now فينفذ كل الأحداث المستحقة؛ استخدمه في نسخة الاختبار أو بعد مراجعة ما سيفعله، لأنه قد يشغّل مهام إضافات أخرى أيضا.

automatic_cron_disabled: true
scheduled_post_status: future
status_after_due_time: future
wp_cron_entry_status: 200
status_after_cron: publish
publish_future_post_remaining: false

مراجع الفحص: wp cron test وتنفيذ أحداث WP-Cron.

المصادر


شارك:

محمد التتر

محمد التتر، محرر ومشرف GZ تقنية، يعمل على اختبار حلول ووردبريس وإدارة المواقع في بيئات منفصلة قبل توثيق النتائج ونشرها.