WP-Cron هو مجدول المهام المدمج في ووردبريس: الإضافات والنواة تسجل أحداثا (نشر المقالات المجدولة، إرسال الإيميلات، النسخ الاحتياطي، معالجة إجراءات ووكومرس)، ويفحص ووردبريس الأحداث المستحقة عند تحميل الصفحات ويشغلها عبر طلب خلفي إلى wp-cron.php. ولأنه يعتمد على الزيارات فهو غير دقيق، والحل هو Cron حقيقي على السيرفر.
هذا الدليل جزء من سلسلة الأتمتة.
كيف يعمل WP-Cron؟
مع كل تحميل صفحة يفحص ووردبريس هل يوجد حدث مجدول مستحق. إن وجد يرسل طلبا غير معطل إلى wp-cron.php لتشغيل الأحداث المستحقة. لا زيارات يعني لا فحص، فتتأخر المهام في المواقع الهادئة. وتحفظ الأحداث في خيار cron بقاعدة البيانات.
مشكلات السلوك الافتراضي
- مواعيد فائتة في المواقع قليلة الزيارات: مقال مجدول للساعة 9:00 ينشر عند وصول الزائر التالي.
- كاش الصفحات: إذا قدم الكاش الصفحات دون تشغيل PHP فقد لا يطلق ووردبريس Cron من هذه الزيارات.
- فشل loopback: بعض الاستضافات أو الجدران النارية تمنع الموقع من طلب نفسه، فلا يعمل
wp-cron.phpأبدا، ويظهر ذلك في صحة الموقع. - حمل على المواقع المزدحمة: فحوصات متكررة ومهام طويلة تعمل داخل طلبات الويب.
- اعتماد ووكومرس: Action Scheduler الذي يستخدمه ووكومرس في الويب هوكس والإيميلات والمهام الخلفية يعتمد على WP-Cron افتراضيا (مع طلبات غير متزامنة).
الخطوة 1: اعرف ما المجدول
باستخدام WP-CLI:
wp cron event list --fields=hook,next_run_relative,recurrence
wp cron schedule list
wp cron test
أو ثبت إضافة WP Crontrol لعرض الأحداث وتشغيلها وتعديلها من لوحة التحكم. ابحث عن:
- أحداث متأخرة منذ وقت طويل.
- Hooks من إضافات حذفتها (أحداث يتيمة).
- جداول متكررة جدا تنفذ عملا ثقيلا.
الخطوة 2: عطل التشغيل عند تحميل الصفحات
في wp-config.php فوق سطر “That’s all, stop editing”:
define( 'DISABLE_WP_CRON', true );
هذا يوقف إطلاق Cron من الزيارات فقط. الأحداث ما زالت موجودة وتحتاج للتشغيل، فنفذ الخطوة 3 فورا.
الخطوة 3: أضف Cron حقيقيا
من لوحة الاستضافة (cPanel وhPanel وأمثالهما فيها قسم “Cron Jobs”) أو بأمر crontab -e على السيرفر.
الخيار أ: WP-CLI (المفضل عند توفره)
*/5 * * * * cd /home/user/public_html && wp cron event run --due-now --quiet
الخيار ب: طلب wp-cron.php
*/5 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
الخيار ج: PHP مباشرة
*/5 * * * * cd /home/user/public_html && php wp-cron.php > /dev/null 2>&1
WP-CLI وPHP المباشر يتجنبان المرور بسيرفر الويب والجدار الناري والكاش، فهما أكثر اعتمادية. تأكد أن مهمة Cron تعمل بنفس المستخدم المالك لملفات الموقع.
الخطوة 4: تحقق
- جدول مقالا تجريبيا بعد دقائق وتأكد أنه نشر.
- شغل
wp cron event listوتأكد أنه لا أحداث متأخرة منذ وقت طويل. - راجع أدوات ← الإجراءات المجدولة في ووكومرس لترى هل تتراكم إجراءات معلقة.
- راجع صحة الموقع بحثا عن تحذيرات الأحداث المجدولة.
جدولة أحداثك الخاصة
داخل إضافة:
register_activation_hook( __FILE__, function () {
if ( ! wp_next_scheduled( 'mx_daily_cleanup' ) ) {
wp_schedule_event( time() + HOUR_IN_SECONDS, 'daily', 'mx_daily_cleanup' );
}
} );
register_deactivation_hook( __FILE__, function () {
wp_clear_scheduled_hook( 'mx_daily_cleanup' );
} );
add_action( 'mx_daily_cleanup', function () {
// Keep it short; move heavy work into batches.
delete_expired_transients();
} );
عادات جيدة:
- جدول عند التفعيل وامسح عند التعطيل، ولا تستدع
wp_schedule_event()مع كل تحميل صفحة دون فحص. - اجعل كل تشغيل قصيرا، وعالج المهام الكبيرة على دفعات عبر عدة تشغيلات.
- اجعل المهام آمنة إذا تكررت مرتين.
- سجل الأخطاء في مكان ستراه.
فترات مخصصة
add_filter( 'cron_schedules', function ( $schedules ) {
$schedules['every_fifteen_minutes'] = array(
'interval' => 15 * MINUTE_IN_SECONDS,
'display' => __( 'Every 15 minutes', 'mx' ),
);
return $schedules;
} );
تذكر: فترات WP-Cron حد أدنى لا ضمان. مع Cron على السيرفر كل 5 دقائق، الجدول كل دقيقة سيعمل تقريبا كل 5 دقائق.
Cron حقيقي للأتمتة الأثقل
في مهام مثل استيراد CSV من الموردين أو إنشاء التقارير، كثيرا ما أتجاوز WP-Cron وأستدعي أمر WP-CLI مخصصا من Cron السيرفر في وقت ثابت. هذا أوضح ومسجل ومستقل عن طابور ووردبريس.
قائمة المراجعة
- مراجعة الأحداث المجدولة وحذف الـ hooks اليتيمة
- ضبط
DISABLE_WP_CRONمع إضافة Cron على السيرفر - اختبار Cron بمقال مجدول
- الإجراءات المجدولة في ووكومرس لا تتراكم
- الأحداث المخصصة تجدول عند التفعيل وتمسح عند التعطيل
أخطاء شائعة
- ضبط
DISABLE_WP_CRONونسيان Cron السيرفر: الإيميلات والنسخ الاحتياطية والمقالات المجدولة تتوقف بصمت. - تشغيل Cron كل دقيقة على استضافة مشتركة بطيئة مع مهام ثقيلة.
- ترك أحداث إضافات محذوفة تطلق أخطاء.
- تنفيذ استيراد ثقيل في تشغيل Cron واحد ينتهي بانتهاء المهلة.
إذا كانت المهام المجدولة في موقعك غير موثوقة، تواصل معي.
الأسئلة الشائعة
ما هو WP-Cron؟
هو المجدول المدمج في ووردبريس، يحفظ الأحداث المجدولة في قاعدة البيانات ويشغل المستحق منها عند تحميل أي صفحة عبر طلب خلفي إلى wp-cron.php.
هل أعطل WP-Cron؟
عطل التشغيل عند تحميل الصفحات فقط إذا استبدلته بـ Cron حقيقي على السيرفر، وإلا ستتوقف المقالات المجدولة والإيميلات والنسخ الاحتياطية ومهام ووكومرس.
كل كم يجب أن يعمل Cron الحقيقي؟
كل 5 دقائق يناسب أغلب المواقع، والمتاجر المزدحمة ذات المهام الحساسة للوقت قد تستخدم كل دقيقة، والمواقع الهادئة جدا كل 15 دقيقة.
لماذا تظهر مقالاتي المجدولة بحالة فات موعدها؟
غالبا لأن WP-Cron لا يعمل: زيارات قليلة، أو DISABLE_WP_CRON مفعل دون Cron على السيرفر، أو طلبات loopback محجوبة، أو الكاش يمنع تشغيل PHP.


