امیر موسوی

طراح و گسترش‌دهنده وب

غیرفعال و جایگزین کردن wp-cron در وردپرس

به نام خدا

مقدمه

نرم‌افزارها برای راحتی بشر اختراع شدن و باید بتونن کارهایی رو انجام بدن که انسان نمیتونه یا دوست نداره انجامش بده. یکی از این کارها scheduling یا زمان‌بندی هست؛ یعنی ما یک سری دستورها رو به نرم‌افزار میدیم و انتظار داریم که در زمان مشخص شده، اون دستورها اجرا بشه.توی سیستم‌عامل‌های شبه‌یونیکس به این قابلیت میگن Cron Job  و توی سیستم عامل ویندوز بهش میگن scheduled task .

در سیستم مدیریت محتوای وردپرس قابلیتی مشابه وجود داره به نام WP-Cron که مسئول انجام کارهای زمان‌بندی شده هست (مثل پست‌هایی که برای آینده زمان‌بندی میشن یا بررسی برای وجود آپدیت جدید). البته یه فرق اساسی بین Cron Job و WP-Cron وجود داره:

وقتی شما یک Cron Job رو در سیستم لینوکس (یا scheduled task در ویندوز) تعریف می‌کنید، یه پردازشی در پس زمینه همواره در حال اجراست و دقیقا در زمان تعریف شده دستور رو انجام میده اما وقتی شما در وردپرس یه پستی رو برای انتشار در آینده زمان‌بندی می‌کنید، هیچ پردازشی در پس زمینه ایجاد نمیشه و فقط در دیتابیس نوشته میشه که این پست در فلان تاریخ منتشر بشه.

مشکل WP-Cron:

مکانیسم WP-Cron به این صورت هستش که هر بار بازدیدکننده‌ای به سایت شما میاد، ابتدا فایل WP-Cron.php بررسی میکنه که آیا پست زمان‌بندی شده‌ای هست یا نه. اگر بود و زمان انتشارش رسیده بود منتشرش میکنه و اگر نبود هم که هیچی!

حالا مشکلی که بوجود میاد اینه که اگه کسی سایت ما رو بازدید نکنه هیچوقت پست ما منتشر نمیشه و طبعاً هر عملی هم که مربوط به انتشار پست هست (مثل ارسال خبرنامه، ارسال به کانال تلگرام و …) انجام نمیشه.

راه حل:

برای اینکه مطمئن بشیم همه چیز درست و به موقع انجام میشه باید یک Cron Job تعریف کنیم که در زمان‌های مشخص فایل WP-Cron رو اجرا کنه. به این ترتیب حتی اگر در اون لحظه هیچ کسی سایت رو بازدید نکرده باشه پست ما منتشر میشه و تمامی اعمال مربوط به اون هم در زمان درست انجام میشن.

در اینجا ایجاد یک کرون جاب با استفاده از Cpanel رو آموزش میدیم:

از کار انداختن عملکرد پیش‌فرض WP-Cron

اول از همه باید به وردپرس بگیم که اجرای فایل WP-Cron رو بسپار به ما :

  1. داخل Cpanel لاگین کنید و وارد قسمت File Manager بشید.
  2. فایل wp-config.php رو که در ریشه‌ی وردپرس قرار داره باز کنید. (از ادیتور ساده‌ی خود Cpanel استفاده کنید.)
  3. در زیرِ تنظیمات مربوط به دیتابیس کد قرمز رنگ را وارد کنید:
  4. فایل رو ذخیره کنید و ببندید.

حالا دیگه وردپرس با هربار بازدید از سایت شما، فایل WP-Cron.php رو اجرا نمیکنه.

ایجاد یک کرون جاب برای اجرای WP-Cron

ما نمیخواهیم قابلیت انجام اتوماتیک کارها رو از وردپرس بگیریم. در واقع ما میخواهیم جلوی اجرا شدن WP-Cron رو با هربار بازدید بگیریم. برای اکثر کاربران وردپرس اگه هر ۶ ساعت یک بار فایل wp-cron.php اجرا بشه کافیه. اینجوری در هر ۲۴ ساعت، ۴ بار این اتفاق میفته که در مقایسه با مثلاً هزار بازدید در روز، خیلی به صرفه‌تر و کارآمدتره.

توجه! تصاویر زیر از Cpanel با پوسته‌ی Paper_Lantern تهیه شده. اگه میبینید Cpanel شما شبیهش نیست شوکه نشید :)

  1. داخل Cpanel لاگین کنید. ( خوب از مرحله قبل طبیعتاً لاگین هستین. نمیدونم چرا تو مقاله اصلی اینو گفته! )
  2. در صفحه‌ی اصلی Cpanel به قسمت Advanced برید و روی Cron Jobs کلیک کنید.disable-wp-cron
  3. در قسمت Cron Email میتونید یه ایمیل وارد کنید که هربار دستور شما توسط سیستم انجام شد یه ایمیل براتون بفرسته. به صورت پیش فرض خودش آدرس ایمیل شما رو داره ولی اگه نداشت خودتون دستی وارد کنید. ضرر نداره :)
  4. از قسمت Common Settings گزینه‌ی Once per hour را انتخاب کنید که به معنای یک بار در هرساعت است.
    add-cron-job-cpanel-ameer
  5. حالا از منوی آبشاری جلوی Hour گزینه (۶/*) Every 6 hours را انتخاب کنید.
    add-cron-job-cpanel-ameer-1
  6. در قسمت Command دستور زیر را وارد کنید:
    دقت کنید که کلمه username همان نام کاربری شما برای ورود به Cpanel است. دقت کنید که این دستور در صورتی جواب میده که شما وردپرس رو در ریشه یا root نصب کرده باشید. اگر وردپرس رو به داخل Sub-directory نصب کردین باید بعد از عبارت public_html یه / بزنید و آدرس زیر شاخه رو وارد کنید. مثلاً اگه وردپرس توی زیر شاخه blog راه اندازی شده دستور به شکل زیر میشه:

  7. حالا روی دکمه Add New Cron Job کلیک کنید و خلاص!

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

دسته‌بندی‌ها: آموزش | وردپرس

« کدام زبان برنامه نویسی را ابتدا یاد بگیرم؟

10 دیدگاه

  1. اقا سلام
    کدی که برای غیرفعال سازی کران جاب وردپرس در بالا گفته شده است اشتباه است….
    کد زیرا امتحان کنید…..

    /** The Database Collate type. Don’t change this if in doubt. */
    define(‘DB_COLLATE’, ”);
    define(‘DISABLE_WP_CRON’, ‘true’);

  2. سلام.ببخشید من هر کاری گفتید انجام دادم اما بازم مینویسه زمانبندی از دست رفته و هیچ مطلبی ارسال نمیشه.
    در ضمن تو مقاله اصلی این مطلب که نگاه کردم وقتی کران جاب ایجاد میکنه دستور لینوکس روبروش سبز رنگه اما من وقتی ایجاد میکنم قرمز رنگه .این مشکلی نداره؟؟؟
    راستی شما که میدونید لطفا بگید چطور زمان وردپرس رو درست کنم؟؟
    هر کار میکنم بازم زمان با زمان خودم مشکل داره.
    ممنون

  3. البته برای یه سایتی که هر ساعت پست ارسالی داره این روش جالب بنظر نمیاد.

    مثلا من از ۸ صبح تا ۸ شب زمان میذارم ساعتی یه پست بیاد که اینجوری ۶ ساعته بکار نمیاد حالا بذاریم ساعتی یبار هم میشه گفت بد نیست. ولی تنظیمات پیشفرض را ترجیح میدم.

    موفق باشید

  4. سلام.یعنی هر ۶ ساعت پست ها ارسال میشه؟؟؟

    • سلام
      بله هر ۶ ساعت بررسی میکنه اگر پستی برای انتشار زمان بندی شده و زمانش فرارسیده و یا گذشته، اون رو منتشر میکنه. مثلا اگه دوتا پست داریم. یکی برای ساعت ۳ بعدازظهر و یکی برای ۶:۰۱ بعدازظهر، وقتی کرون جاب ساعت ۶ انجام میشه، فقط پست اول منتشر میشه و پست ۶:۰۱ در ساعت ۱۲ شب.

  5. با سلام و خسته نباشید ویدیو ی آموزشی رو بزودی براتون آپلود میکنم که توی سایتتون قرار بدین

پاسخ دهید

نشانی ایمیل شما منتشر نمی‌شود.

*

2 × 1 =

کپی رایت © سال ۱۳۹۴ خورشیدی | امیر موسوی

پوسته از Anders Norenبالا ↑