تابع wp_doing_cron در وردپرس
تابع wp_doing_cron() در وردپرس ابزاری ساده ولی کاربردی برای تشخیص این است که اجرای فعلی کد، در زمینهٔ اجرای کرون وردپرس (WP-Cron) انجام میشود یا خیر. در توسعهٔ افزونه و قالب، تشخیص این حالت به شما کمک میکند تا از اجرای ناخواستهٔ کارها در زمان نامناسب جلوگیری کنید و منطق ویژهٔ مربوط به پردازشهای زمانبندیشده را جدا نگه دارید.
چرا باید از wp_doing_cron() استفاده کنیم؟
- جلوگیری از اجرای توابعی که فقط باید در درخواستهای کاربر اجرا شوند (مثلاً منطق نمایش یا رندر).
- ایمنسازی یا محدود کردن عملیات سنگین هنگام اجرا شدن کرون (مثلاً جلوگیری از ایجاد لاگ اضافی یا ارسال ایمیلهای تست از کرون).
- نوشتن کد تمیز و قابلخواندن: مشخص کردن واضح اینکه قطعه کد در «زمینه کرون» اجرا میشود.
نحوهٔ کارکرد و تفاوت با دیگر روشها
wp_doing_cron() یک wrapper ساده برای تشخیص حالت کرون است؛ معمولاً بررسی میکند که آیا ثابت DOING_CRON تعریف شده و مقدارش true است یا درخواست شامل پارامتر doing_wp_cron میباشد. استفاده از این تابع نسبت به چک مستقیم ثابت مناسبتر و خواناتر است.
| روش | کاربرد |
|---|---|
| DOING_CRON | ثابت سیستمی که هنگام اجرای wp-cron.php تعریف میشود |
| wp_doing_cron() | تابع کمکی برای تشخیص حالت کرون (خواناتر و قابل استفاده در پلاگینها) |
| doing_action(‘hook_name’) | تشخیص اینکه آیا یک اکشن خاص در حال اجراست (مفید برای تشخیص اجرای یک کرون هوک مشخص) |
مثال پایه — جلوگیری از اجرای کد در کرون
add_action( 'init', 'my_plugin_init' );
function my_plugin_init() {
if ( wp_doing_cron() ) {
return; // وقتی کرون اجرا میشود، این بخش را نادیده بگیر
}
// کدهایی که فقط باید در درخواستهای عادی اجرا شوند
my_plugin_frontend_setup();
}این قطعه کد نشان میدهد چگونه میتوانید در ابتدای عملکرد افزونه بررسی کنید که آیا اجرای فعلی از نوع کرون است؛ اگر بله، ادامهٔ منطق مخصوص فرانتاند را متوقف کنید تا تداخل پیش نیاید.
مثال: اجرای منطق مخصوص هنگام فراخوانی یک کرون هوک خاص
// ثبت یک رویداد کرون سفارشی
if ( ! wp_next_scheduled( 'my_hourly_event' ) ) {
wp_schedule_event( time(), 'hourly', 'my_hourly_event' );
}
add_action( 'my_hourly_event', 'my_hourly_function' );
function my_hourly_function() {
// مطمئن میشویم که این اجرا در زمینهٔ کرون انجام شده است
if ( ! wp_doing_cron() ) {
return;
}
// عملیات زمانبندی شده که باید فقط در کرون اجرا شود
do_critical_task();
}در این مثال، ابتدا یک رویداد ساعتی زمانبندی شده و سپس تابع مربوط به آن اضافه میشود. داخل تابع زمانبندیشده از wp_doing_cron() استفاده شده تا مطمئن شویم اجرا از طریق سیستم کرون وردپرس انجام شده است.
ترکیب با doing_action برای تشخیص هوک مشخص
add_action( 'my_special_hook', function() {
if ( wp_doing_cron() && doing_action( 'my_special_hook' ) ) {
// فقط زمانی که این هوک از طریق کرون اجرا شده است
perform_cron_only_action();
}
});این ترکیب زمانی مفید است که بخواهید مطمئن شوید یک هوک مشخص در بستر کرون اجرا شده است و نه در یک درخواست عادی که ممکن است همان هوک را نیز فراخوانی کند.
نکات عملیاتی و بهترین شیوهها
- برای عملیات سنگین یا حساس به زمان، DISABLE_WP_CRON را فعال کنید و از کرون سیستمی (system cron) برای فراخوانی wp-cron.php استفاده کنید تا پایداری و عملکرد بهتر شود.
- برای تست محلی از WP-CLI استفاده کنید:
wp cron event run --due-nowکه محیط واقعی کرون را شبیهسازی میکند. - در کدهایی که ممکن است هم از کرون و هم از درخواست عادی فراخوانی شوند، صریحاً با wp_doing_cron() شرایط را مدیریت کنید تا از دو بار اجرا یا مشکلات وضعیت جلوگیری شود.
- اگر نیاز دارید مشخص کنید اجرای فعلی از CLI است، از
wp_doing_cli()نیز استفاده کنید؛ گاهی لازم است رفتار در CLI و کرون متفاوت باشد.
نمونهٔ دستور برای زمانبندی واقعی با کرون سیستم
*/15 * * * * wget -q -O - "https://example.com/wp-cron.php?doing_wp_cron" > /dev/null 2>&1این دستور crontab هر 15 دقیقه فایل wp-cron.php را فراخوانی میکند و با پارامتر doing_wp_cron اطمینان حاصل میکند که وردپرس کرون را اجرا میکند. در محیطهای امنتر میتوانید از curl یا فرمان php CLI به همراه wp cron event run استفاده کنید.
خطاها و نکات امنیتی
- هیچگاه اجرای کرون را به طور کامل به درخواست GET عمومی بدون محدودیت نگذارید؛ بهتر است از کرون سیستمی یا محیطهای کنترلشده استفاده کنید.
- اگر تابع شما به منابع حساس دسترسی دارد، بررسی کنید که ورودیها و شرایط ایمن باشند حتی هنگام اجرای کرون.
جمعبندی و نتیجهگیری
تابع wp_doing_cron() ابزار ساده و مؤثری برای تمییز بین اجرای عادی و اجرای زمانبندیشده در وردپرس است. با استفادهٔ هوشمندانه از این تابع میتوانید از اجرای نادرست کدها، تداخل پردازشها و بار اضافی جلوگیری کنید و منطق کرون را به صورت واضح و ایمن مدیریت نمایید. توصیه میشود برای عملیات برنامهریزیشده از ترکیب wp_doing_cron، doing_action و در صورت نیاز WP-CLI یا کرون سیستمی استفاده کنید تا پایداری و امنیت سایت حفظ شود.
آیا این مطلب برای شما مفید بود ؟




