ویژگی تصویر

زمان بندی پست ها در وردپرس با WP Cron

  /  وردپرس   /  زمان بندی پست ها در وردپرس با WP Cron
بنر تبلیغاتی الف
wp - wordpress - وردپرس

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

WP Cron چیست و چگونه کار می‌کند؟

WP Cron یک سیستم زمان‌بندی مبتنی بر بازدید کاربران است. به این معنا که هر بار که سایت شما توسط بازدیدکننده‌ای بارگذاری می‌شود، وردپرس بررسی می‌کند که آیا کاری زمان‌بندی شده وجود دارد یا خیر و در صورت نیاز آن را اجرا می‌کند.

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

نحوه ایجاد یک وظیفه زمان‌بندی شده در WP Cron

برای ایجاد یک کار زمان‌بندی شده، ابتدا باید یک hook تعریف کنید و سپس آن را با استفاده از wp_schedule_event() زمان‌بندی کنید.

function my_custom_cron_job() {
    // کاری که می‌خواهیم انجام شود
    error_log('WP Cron executed!');
}
add_action('my_custom_cron_hook', 'my_custom_cron_job');

// زمان‌بندی وظیفه در زمان فعال شدن افزونه
if (!wp_next_scheduled('my_custom_cron_hook')) {
    wp_schedule_event(time(), 'hourly', 'my_custom_cron_hook');
}

در این مثال، یک hook به نام my_custom_cron_hook تعریف شده است که هر ساعت اجرا می‌شود و پیام ساده‌ای را در فایل لاگ قرار می‌دهد.

پارامترهای wp_schedule_event()

  • time(): زمان شروع اولین اجرا به صورت timestamp.
  • recurrence: بازه تکرار اجرای کار، مانند hourly, daily یا twicedaily.
  • hook: نام hook که باید اجرا شود.

ایجاد بازه‌های سفارشی برای WP Cron

اگر بازه پیش‌فرض کافی نباشد، می‌توانیم بازه‌های دلخواه ایجاد کنیم:

add_filter('cron_schedules', 'my_custom_cron_intervals');
function my_custom_cron_intervals($schedules) {
    $schedules['every_five_minutes'] = array(
        'interval' => 300, // ۵ دقیقه به ثانیه
        'display'  => 'هر ۵ دقیقه'
    );
    return $schedules;
}

با اضافه کردن این فیلتر، می‌توانیم از every_five_minutes در wp_schedule_event استفاده کنیم.

حذف یک زمان‌بندی

برای جلوگیری از اجرای مداوم یک کار، می‌توان آن را حذف کرد:

$timestamp = wp_next_scheduled('my_custom_cron_hook');
wp_unschedule_event($timestamp, 'my_custom_cron_hook');

این کد بررسی می‌کند که آیا وظیفه زمان‌بندی شده وجود دارد و در صورت وجود آن را حذف می‌کند.

نکات بهینه‌سازی و مشکلات رایج

  • مشکل ترافیک کم: در سایت‌های با بازدید پایین، WP Cron ممکن است به موقع اجرا نشود. برای رفع آن می‌توان از Cron Job واقعی سرور استفاده کرد.
  • محدود کردن تعداد اجرا: اجرای بیش از حد Cron Jobs می‌تواند سرعت سایت را کاهش دهد. همیشه از توابعی مانند wp_next_scheduled() برای جلوگیری از ایجاد وظایف تکراری استفاده کنید.
  • اشکال‌زدایی: از error_log() یا افزونه‌های مانیتورینگ Cron برای بررسی عملکرد وظایف استفاده کنید.

اجرای WP Cron با Cron واقعی سرور

برای اطمینان از اجرای دقیق وظایف، می‌توان WP Cron را با Cron واقعی سرور لینوکس ترکیب کرد:

* * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

این دستور هر دقیقه فایل wp-cron.php وردپرس را اجرا می‌کند و تمام زمان‌بندی‌ها بدون وابستگی به بازدیدکننده انجام می‌شود.

نمونه عملی: انتشار پست زمان‌بندی شده با WP Cron

function publish_scheduled_post() {
    $post_id = 123; // شناسه پست مورد نظر
    wp_publish_post($post_id);
}
add_action('publish_post_cron', 'publish_scheduled_post');

if (!wp_next_scheduled('publish_post_cron')) {
    wp_schedule_event(strtotime('2025-10-20 10:00:00'), 'daily', 'publish_post_cron');
}

در این مثال، پست با شناسه 123 هر روز در ساعت مشخص منتشر می‌شود.

نتیجه‌گیری

WP Cron یک ابزار قدرتمند برای مدیریت وظایف زمان‌بندی شده در وردپرس است. با درک منطق داخلی آن، ایجاد hookها و استفاده از بازه‌های سفارشی، می‌توان کارهایی مانند انتشار خودکار پست‌ها، پاکسازی داده‌ها و اجرای وظایف دوره‌ای را به صورت خودکار انجام داد. توجه به بهینه‌سازی و مشکلات احتمالی کمک می‌کند که Cron Jobs بدون اختلال و به موقع اجرا شوند.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: