جلوگیری از لود بیمورد اسکریپت و استایل در وردپرس
بعضی از استایل و اسکریپتهایی که خود وردپرس، پوسته یا افزونهها لود میکنن فقط تو صفحات خاصی ازشون استفاده میشه. محدود کردن بارگذاری این فایلها به محل مورد نیاز میتونه به کم کردن حجم صفحات و افزایش سرعت وردپرس کمک کنه.
برای سایتهایی که اسلایدر و افزونههای وابسته به جی کوئری ندارن عملا لود این اسکریپت جایی غیر از پستها کارایی نداره پس برای نمونه جلوی لود 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
سلام
قالب من یه فایل js رو بارگزاری می کنه که می خوام حذفش کنم ولی پیداش نمی کنم کدی وجود داره که از بارگزاری این js جلوگیری کنیم ؟
لازم به ذکر است این js از یه سایت دیگه لود میشه
سلام پیمان جان. باید فایلهای قالب رو بررسی و پیداش کنین. اگر تو functions.php نیست ببینین تو این فایل چه فایلهایی فراخوانی شدن اونا رو بررسی کنین.
آیا اسلایدرها از جی کوئری استفاده می کنند ؟ یا ای جکس یا فلش ؟ (معمولا ؟)
من چندین اسلایدر وردپرس را روی قالب دست سازم تست کردم، هیچکدام جواب نداد !
مشکل از کجاست ؟ !
ضمنا دکمه ی ثبت نظر هم در صفحه اصلی کار نمی کند !
پیام خاصی هم نمی دهد !
از جی کوئری استفاده میکنن دوست عزیز.
سلام
عالی بود.ممنون
موفق باشید.
سلام. تو سایت من ۳ تا فایل به اسم functions.php هست…
یکیش توی wp-includes
2 تا هم توی قسمت تمم هست… توی کودوم وارد کنم. پیر شدم از بس سایتم سرعتش پایینه و الکی لود میکنه. چند وقت پیش سرور سایتم رو بست گفت داره زیادی سی پی یو استفاده میکنه. (U)
سلام دوست عزیز. تو functions.php پوسته وارد کنین.
لایک به این نوت 🙂
بعد یه سوال هم داشتم ممنون میشم راهنمایی کنید
یه پلاگین میخوام که در ش لیست کاری هایی رو که قرار هست انجام بدم رو بنویسم البته فقط در مدیریت وبلاگم بنمایش در آد
یه چیزی شبیه دفترچه یادداشت
یه چیزی شبیه task توی سرویس گوگل
حتا اگه ساده تر هم باشه برام کافیه
خودم هر چ سرچیدم چیزی نیافتم:(
سلام دوست عزیز. از پلاگین Dashboard Notepadاستفاده کنین.
عالی بود!
ممنون آقا محسن.
عالی بود …
تشکر
سلام و ممنون از مطلب مفیدتون
میشه توضیح بدید اگر بخواهیم یک افزونه با اسکریپت فقط برای توشتههای یک دسته خاص اجرا بشود چه کار باید کرد؟
فکر میکنم باید از تابع in_category استفاده بشه.
به این میگن یه آموزش حرفه ای !
دست شما درد نکنه ! 🙂
خواهش می کنم دوست عزیز (f)
ممنون بازم از این کارا بکن آقا محسن 😀
ایشالا محمود جان 😉
کارت درسته محسن جان دم شما گرم فقط همینو میتونم بگم (Y)
خیلی لطف دارین آقا محسن، مخلصم (f)
سپاس محسن جان به خاطر این مطلب بسیار مفید
قربون شما حسین جان.
هلاااااکتم هلااااااااااک … دس مریــــــــــــــــزاد (F) (W)
مخلصم عابد جان با این گل سر بزیر خیلی حال میکنم 😉
حرف نداره چیزی که مدت ها دنبالشم (Y)
فقط محسن جان میشه بگی دقیقا منی که اسلایدیر تو صفحه اصلی دارم اگه از این کدها استفاده کنم اسلایدرم از کار میوفته؟
فکر میکنم که اسلایدر سایت شما از جیکوئری استفاده میکنه و نمیتونین غیرفعالش کنین.