تابع wp_register_script در وردپرس
تابع wp_register_script() یکی از ابزارهای اصلی مدیریت فایلهای جاوااسکریپت در وردپرس است. با استفاده از این تابع میتوانید اسکریپتها را ثبت (register) کنید و سپس در زمان مناسب آنها را بارگذاری (enqueue) کنید. این رویکرد بهینهتر، منعطفتر و سازگار با سیستم بارگذاری وردپرس است.
چرا باید از wp_register_script() استفاده کنیم؟
- مدیریت وابستگیها (dependencies) بین اسکریپتها.
- قابلیت ثبت اسکریپت بدون لود فوری؛ مناسب برای لود شرطی.
- پیشگیری از تکرار بارگذاری و ناسازگاری با پلاگینها/تمها.
- قابلیت استفاده از نسخهبندی (versioning) و بارگذاری در فوتر (footer).
امضای تابع و پارامترها
| پارامتر | نوع | توضیح |
|---|---|---|
| $handle | string | نام یکتا برای شناسایی اسکریپت |
| $src | string | آدرس فایل اسکریپت |
| $deps | array | آرایهای از handles که این اسکریپت به آنها وابسته است |
| $ver | string|bool | نسخه فایل؛ برای کشبستینگ |
| $in_footer | bool | بارگذاری در footer یا head |
مثال پایه: ثبت و سپس بارگذاری
function mytheme_register_scripts() {
wp_register_script(
'my-script',
get_template_directory_uri() . '/js/my-script.js',
array('jquery'),
'1.0.0',
true
);
// در اینجا میتوانیم ثبت را بدون enqueue انجام دهیم
// wp_enqueue_script('my-script');
}
add_action('wp_enqueue_scripts', 'mytheme_register_scripts');در این کد، ابتدا اسکریپت با نام my-script ثبت شده و مسیر آن نسبت به پوشه قالب گرفته شده است. تعیین شده که این اسکریپت به jquery وابسته است، نسخه 1.0.0 دارد و در فوتر بارگذاری شود. ثبت کردن باعث نمیشود که فوراً لود شود؛ فقط معرفی را انجام میدهد. اگر لازم بود در همان لحظه لود شود، میتوانستیم از wp_enqueue_script استفاده کنیم.
بارگذاری شرطی: فقط در صفحه مشخص
function load_script_on_single() {
if (is_singular('post')) {
wp_enqueue_script('my-script'); // در صورتی که قبلاً ثبت شده باشد
}
}
add_action('wp_enqueue_scripts', 'load_script_on_single');با این روش میتوانید از لود غیرضروری اسکریپتها جلوگیری کنید و فقط در صفحات مقالهها آن را فعال نمایید. توجه کنید که برای این روش باید قبلاً اسکریپت را با wp_register_script ثبت کرده باشید.
بهینهسازی کش: استفاده از filemtime
function mytheme_register_with_filemtime() {
$script_path = get_template_directory() . '/js/my-script.js';
$version = file_exists($script_path) ? filemtime($script_path) : '1.0.0';
wp_register_script(
'my-script',
get_template_directory_uri() . '/js/my-script.js',
array(),
$version,
true
);
wp_enqueue_script('my-script');
}
add_action('wp_enqueue_scripts', 'mytheme_register_with_filemtime');ایده filemtime این است که هرگاه فایل تغییر کند، زمان آخرین ویرایش بهعنوان نسخه استفاده شده و مرورگرها فایل جدید را دریافت میکنند. این روش ساده و مؤثر برای حل مشکلات کش در محیط توسعه یا بعد از بهروزرسانی فایلهاست.
استفاده از wp_localize_script برای ارسال داده از PHP به JS
function mytheme_localize_script() {
wp_register_script('my-script', get_template_directory_uri() . '/js/my-script.js', array('jquery'), null, true);
$data = array(
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('my_nonce')
);
wp_localize_script('my-script', 'MyThemeData', $data);
wp_enqueue_script('my-script');
}
add_action('wp_enqueue_scripts', 'mytheme_localize_script');با wp_localize_script میتوان متغیرهای PHP را به صورت امن به اسکریپت جاوااسکریپت منتقل کرد. در مثال بالا آدرس AJAX و یک nonce ارسال شدهاند. نام شیء جاوااسکریپت MyThemeData خواهد بود.
مثال پیشرفته: جایگزینی jQuery با CDN هنگام توسعه
function replace_jquery_with_cdn() {
if (!is_admin()) {
wp_deregister_script('jquery');
wp_register_script(
'jquery',
'https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js',
array(),
null,
true
);
wp_enqueue_script('jquery');
}
}
add_action('wp_enqueue_scripts', 'replace_jquery_with_cdn');این مثال jQuery هسته وردپرس را لغو کرده و نسخه CDN را برای بخش فرانتاند رجیستر و انکیو میکند. باید با احتیاط استفاده شود چون برخی افزونهها یا تمها ممکن است به نسخه خاصی از jQuery وابسته باشند.
نکات و بهترین شیوهها (Best Practices)
- همیشه از هوکهای مناسب مانند wp_enqueue_scripts برای فرانتاند و admin_enqueue_scripts برای پنل مدیریت استفاده کنید.
- برای فایلها در تمها از get_template_directory_uri() یا get_stylesheet_directory_uri() و در پلاگینها از plugin_dir_url(__FILE__) استفاده کنید.
- از dependencyها بهره ببرید تا ترتیب لود و نیازمندیها بهدرستی رعایت شود.
- اگر اسکریپت سنگین است، آن را در فوتر بارگذاری کنید تا سرعت رندر اولیه صفحه بیشتر شود.
- برای کشبستینگ از filemtime یا نسخهدهی منطقی استفاده کنید؛ از قرار دادن زمان ثابت در نسخه خودداری کنید.
- از wp_localize_script برای ارسال دادههای امن به جاوااسکریپت استفاده کنید؛ از echo کردن مستقیم اسکریپتها در فایل PHP خودداری کنید.
مشکلات رایج و راهحلها
- اسکریپت شما اجرا نمیشود: بررسی کنید که آیا enqueue به درستی انجام شده و وابستگیها حل شدهاند.
- نسخه قدیمی لود میشود: از filemtime یا تغییر ورژن استفاده کنید.
- تداخل با پلاگینها: handle اسکریپت را یونیک نگه دارید یا از بررسی وجود handle قبل از رجیستر استفاده کنید.
جمعبندی
wp_register_script() یک روش استاندارد و امن برای معرفی اسکریپت در وردپرس است که به شما امکان میدهد کنترل دقیقی روی بارگذاری، وابستگیها و نسخهبندی داشته باشید. با ترکیب آن با wp_enqueue_script، wp_localize_script و تکنیکهایی مانند filemtime میتوانید تجربه توسعهای حرفهایتر و صفحات سریعتر و قابل نگهداریتری ایجاد کنید.
در پروژههای بزرگتر، ثبت همه اسکریپتها در یک تابع مرکزی و سپس بارگذاری شرطی در هر صفحه، نظم و کارایی را افزایش میدهد و باعث میشود به راحتی اسکریپتها را مدیریت یا جایگزین کنید.
آیا این مطلب برای شما مفید بود ؟




