جلوگیری از لود بی‌مورد اسکریپت و استایل در وردپرس

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

برای سایت‌هایی که اسلایدر و افزونه‌های وابسته به جی کوئری ندارن عملا لود این اسکریپت جایی غیر از پست‌ها کارایی نداره پس برای نمونه جلوی لود jQuery رو تو صفحه اصلی، بایگانی‌ها و برگه‌ها می‌گیریم:

add_action( 'wp_print_scripts', 'my_deregister_javascript', 100 );

function my_deregister_javascript() {
if (is_front_page() || is_archive() || is_page()) {
wp_deregister_script( 'jquery' );
}
}

کدهای بالا باید به فایل functions.php‌ اضافه بشه و بهتره از طریق کنترل پنل هاست تغییرات صورت بگیره تا در صورت خرابکاری و بالا نیومدن سایت، سریعا به حالت اول برگردونده بشه.

برای انجام این کار روی بقیه‌ی اسکریپت‌ها نیاز به قرار دادن مجدد کدها نیست. فقط کافیه کد غیرفعال سازی رو زیر کد مربوط به جی کوئری اضافه کنین. بطور مثال اسکریپت پلاگین Lighbox Plus که خیلی از دوستان ازش استفاده می‌کنن رو به اینصورت از لودش جلوگیری می‌کنیم:


add_action( 'wp_print_scripts', 'my_deregister_javascript', 100 );

function my_deregister_javascript() {
if (is_front_page() || is_archive() || is_page()) {
wp_deregister_script( 'jquery' );
wp_deregister_script( 'lightbox' );
}
}

البته معنیش این نیست که همیشه باید jQury غیر فعال باشه تا بشه بقیه‌ی اسکریپتها رو غیرفعال کرد ولی در مورد Lightbox Plus مجبور به انجام این کار هستیم.

و اما پلاگینها:

تو این مورد اول باید handle مربوط به اسکریپت که شبیه jquery و lightbox تو کد بالا هست رو پیدا کنین. برای مثال از پلاگین Ajax Contact‌ استفاده می‌کنیم.

معمولا handle رو باید تو فایل اصلی افزونه پیدا کرد اما در مورد این افزونه تو فایل functions.php بهش می‌رسیم، خط ۸۶:

wp_enqueue_script( 'ajax-contact' );

عبارت wp_enqueue_script راهنمای ماست و ajax-contact هندل مورد نظر. پس کد رو به این صورت ویرایش می‌کنیم:


add_action( 'wp_print_scripts', 'my_deregister_javascript', 100 );

function my_deregister_javascript() {
if (is_front_page() || is_archive() || is_page()) {
wp_deregister_script( 'jquery' );
wp_deregister_script( 'lightbox' );
wp_deregister_script( 'ajax-contact' );
}
}

اسکریپت این پلاگین بدون جلوگیری از لود جی کوئری هم غیرفعال میشه. در ضمن غیرفعال شدن jQuery از بارگذاری اسکریپت افزونه هم جلوگیری می کنه!

در مورد استایل هم فرض کنین قراره فایل css افزونه‌ی Ajax Contact رو فقط تو برگه‌ها لود کنین. اولین کار پیدا کردن handle‌ هست که تو خط ۸۵ فایل functions.php پلاگین بهش می‌رسیم:

wp_enqueue_style( 'ajax-contact-css' );

مرحله‌ی دوم هم میشه قرار دادن این کد تو functions.php‌ پوسته:

add_action( 'wp_print_styles', 'my_deregister_styles', 100 );
function my_deregister_styles() {
if (is_front_page() || is_archive() || is_single()) {
wp_deregister_style( 'ajax-contact-css' );
}
}

در مورد استایل میشه با برداشتن خط ۳ و ۶ کد بالا بطور کلی از لودش جلوگیری و محتویاتش رو به استایل اصلی پوسته اضافه کرد.

چند نکته‌:

از functions.php پوسته حتما بک‌آپ بگیرین!

برای پیدا کردن کد مربوط به صفحات مختلف وردپرس (is_single و…)، این بخش از مستندات رو مشاهده کنین.

یک بار تنظیمات افزونه‌ها رو هم نگاه کنین. پلاگین‌هایی مثل Lightbox Plus و WP-PageNavi خودشون گزینه‌ای برای غیرفعال کردن استایل دارن.

اگر از پلاگین Contact Form 7 استفاده می‌کنین این مطلب رو بخونین.

با این روش فقط اسکریپت و استایل‌هایی که با استفاده از توابع wp_enqueue_script و wp_enqueue_style به پوسته یا افزونه‌ها اضافه شدن غیرفعال میشن. ممکنه قالب یا پلاگین شما از روش غیر استاندارد استفاده کرده باشه در نتیجه دقیقا هیچی 😉

منبع: وبلاگ Justin Tadlock

هاستینگ وردپرس ماندگاروب
۲۵ دیدگاه
  1. پیمان

    سلام
    قالب من یه فایل js رو بارگزاری می کنه که می خوام حذفش کنم ولی پیداش نمی کنم کدی وجود داره که از بارگزاری این js جلوگیری کنیم ؟
    لازم به ذکر است این js از یه سایت دیگه لود میشه

    پاسخ
    • محسن غیاثی

      سلام پیمان جان. باید فایلهای قالب رو بررسی و پیداش کنین. اگر تو functions.php نیست ببینین تو این فایل چه فایلهایی فراخوانی شدن اونا رو بررسی کنین.

      پاسخ
  2. پیامک

    آیا اسلایدرها از جی کوئری استفاده می کنند ؟ یا ای جکس یا فلش ؟ (معمولا ؟)
    من چندین اسلایدر وردپرس را روی قالب دست سازم تست کردم، هیچکدام جواب نداد !

    مشکل از کجاست ؟ !
    ضمنا دکمه ی ثبت نظر هم در صفحه اصلی کار نمی کند !
    پیام خاصی هم نمی دهد !

    پاسخ
  3. آرشــــــــ

    سلام
    عالی بود.ممنون
    موفق باشید.

    پاسخ
  4. mihi

    سلام. تو سایت من ۳ تا فایل به اسم functions.php‌ هست…
    یکیش توی wp-includes
    ۲ تا هم توی قسمت تمم هست… توی کودوم وارد کنم. پیر شدم از بس سایتم سرعتش پایینه و الکی لود میکنه. چند وقت پیش سرور سایتم رو بست گفت داره زیادی سی پی یو استفاده میکنه. (U)

    پاسخ
  5. Hamza

    لایک به این نوت 🙂
    بعد یه سوال هم داشتم ممنون میشم راهنمایی کنید
    یه پلاگین میخوام که در ش لیست کاری هایی رو که قرار هست انجام بدم رو بنویسم البته فقط در مدیریت وبلاگم بنمایش در آد
    یه چیزی شبیه دفترچه یادداشت
    یه چیزی شبیه task توی سرویس گوگل
    حتا اگه ساده تر هم باشه برام کافیه

    خودم هر چ سرچیدم چیزی نیافتم:(

    پاسخ
  6. Akbar

    عالی بود!
    ممنون آقا محسن.

    پاسخ
  7. محمد

    عالی بود …
    تشکر

    پاسخ
  8. احسان

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

    پاسخ
  9. lili

    به این میگن یه آموزش حرفه ای !

    دست شما درد نکنه ! 🙂

    پاسخ
  10. محمود

    ممنون بازم از این کارا بکن آقا محسن 😀

    پاسخ
  11. محسن شایان

    کارت درسته محسن جان دم شما گرم فقط همینو میتونم بگم (Y)

    پاسخ
  12. hos7ein

    سپاس محسن جان به خاطر این مطلب بسیار مفید

    پاسخ
  13. عابد ارجمند

    هلاااااکتم هلااااااااااک … دس مریــــــــــــــــزاد (F) (W)

    پاسخ
  14. محمد حسین

    حرف نداره چیزی که مدت ها دنبالشم (Y)
    فقط محسن جان میشه بگی دقیقا منی که اسلایدیر تو صفحه اصلی دارم اگه از این کدها استفاده کنم اسلایدرم از کار میوفته؟

    پاسخ
    • محسن غیاثی

      فکر می‌کنم که اسلایدر سایت شما از جی‌کوئری استفاده می‌کنه و نمی‌تونین غیرفعالش کنین.

      پاسخ

Please Post Your Comments & Reviews

نشانی ایمیل شما منتشر نخواهد شد Required fields are marked *

*