ویژگی تصویر

آموزش تابع wp_register_script() در وردپرس و کاربرد آن

  /  وردپرس   /  تابع wp_register_script در وردپرس
بنر تبلیغاتی الف
wp - wordpress - وردپرس

تابع wp_register_script() یکی از ابزارهای اصلی مدیریت فایل‌های جاوااسکریپت در وردپرس است. با استفاده از این تابع می‌توانید اسکریپت‌ها را ثبت (register) کنید و سپس در زمان مناسب آن‌ها را بارگذاری (enqueue) کنید. این رویکرد بهینه‌تر، منعطف‌تر و سازگار با سیستم بارگذاری وردپرس است.

چرا باید از wp_register_script() استفاده کنیم؟

  • مدیریت وابستگی‌ها (dependencies) بین اسکریپت‌ها.
  • قابلیت ثبت اسکریپت بدون لود فوری؛ مناسب برای لود شرطی.
  • پیشگیری از تکرار بارگذاری و ناسازگاری با پلاگین‌ها/تم‌ها.
  • قابلیت استفاده از نسخه‌بندی (versioning) و بارگذاری در فوتر (footer).

امضای تابع و پارامترها

پارامترنوعتوضیح
$handlestringنام یکتا برای شناسایی اسکریپت
$srcstringآدرس فایل اسکریپت
$depsarrayآرایه‌ای از handles که این اسکریپت به آن‌ها وابسته است
$verstring|boolنسخه فایل؛ برای کش‌بستینگ
$in_footerboolبارگذاری در 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 می‌توانید تجربه توسعه‌ای حرفه‌ای‌تر و صفحات سریع‌تر و قابل نگهداری‌تری ایجاد کنید.

در پروژه‌های بزرگ‌تر، ثبت همه اسکریپت‌ها در یک تابع مرکزی و سپس بارگذاری شرطی در هر صفحه، نظم و کارایی را افزایش می‌دهد و باعث می‌شود به راحتی اسکریپت‌ها را مدیریت یا جایگزین کنید.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: