در پروژه‌ای برای یک فروشگاه کوچک، ویجت چت پشتیبانی را به‌طور پیش‌فرض در هدر قرار داده بودیم. مدتی بعد، گزارش آمد که صفحهٔ محصول در موبایل کند شده است؛ بررسی نشان داد همان ویجت، پیش از هر چیز دیگری بارگذاری می‌شود و مرورگر را در مسیر بحرانی رندر نگه می‌دارد. جابه‌جایی همان کد از هدر به فوتر، زمان نمایش دکمهٔ خرید را حدود هفتصد میلی‌ثانیه در موبایل بهبود داد و ویجت هم بدون مشکل کار کرد. آن پروژه، قاعدهٔ ساده‌ای در کار من ساخت: هر کدی که برای رفتار کاربر «حیاتی و آنی» نیست، جای طبیعی‌اش فوتر است، نه هدر. در این مقاله، قطعه کد افزودن کد سفارشی به فوتر وردپرس را با همان رویکرد عملی مرور می‌کنیم: هوک رسمی wp_footer، تفاوتش با تزریق در هدر، کاربردهای واقعی، ملاحظات سرعت و پایداری، و خطاهای رایجی که در پروژه‌های مختلف دیده‌ام. اگر با مفهوم پایهٔ اسنیپت آشنا نیستید، پیش از ادامه قطعه کد وردپرس چیست و چگونه از آن استفاده کنیم نقطهٔ شروع مناسب‌تری است. مقالهٔ خواهرِ این موضوع هم دربارهٔ افزودن کد به هدر است که در قطعه کد افزودن کد سفارشی به هدر وردپرس آمده است.

فوتر در وردپرس، به بخش انتهایی هر صفحهٔ HTML گفته می‌شود؛ جایی که مرورگر پیش از بستن </body> به آن می‌رسد. اهمیت این نقطه، در ترتیب پردازش مرورگر است: مرورگر ابتدا محتوای صفحه را از بالا به پایین می‌خواند و رندر می‌کند، سپس به فوتر می‌رسد. یعنی کدی که در فوتر قرار می‌گیرد، رندر شدن صفحه را بلوکه نمی‌کند و کاربر می‌تواند محتوای اصلی را ببیند، حتی اگر آن کد هنوز بارگذاری نشده باشد. این ویژگی، برای سه دستهٔ کد، آن را به گزینهٔ طبیعی تبدیل می‌کند:

دستهٔ اول: اسکریپت‌هایی که به DOM وابسته‌اند. ویجت‌های چت، پاپ‌آپ‌ها، ابزارهای A/B تست، و اسکریپت‌هایی که با عناصر صفحه کار می‌کنند، به DOM کامل نیاز دارند. اگر در فوتر بارگذاری شوند، DOM در دسترس است و نیازی به DOMContentLoaded ندارند. این مزیت کوچک، در بعضی اسکریپت‌ها تفاوت محسوسی در سرعت اجرای اولیه می‌سازد.

دستهٔ دوم: کدهای تحلیلی و رهگیری. بیشتر کدهای رهگیری، به دقت میلی‌ثانیه‌ای روی تعامل کاربر نیاز ندارند و می‌توانند چند صد میلی‌ثانیه دیرتر بارگذاری شوند، بی‌آنکه داده‌ای از دست برود. این تأخیر کوچک، در سرعت صفحهٔ اول اثر قابل‌توجهی دارد. مقالهٔ چگونه سرعت سایت وردپرسی را افزایش دهیم این تفکیک را با مثال‌های بیشتر باز می‌کند.

دستهٔ سوم: اسکریپت‌های بلند و کم‌اهمیت. اسکریپت‌هایی که برای رندر اولیه لازم نیستند — مثل ابزارهای اشتراک‌گذاری، سیستم‌های نظرسنجی، یا ویجت‌های پشتیبانی — در فوتر می‌توانند بدون فشار روی تجربهٔ کاربر اجرا شوند.

در مقابل، دو دسته همیشه باید در هدر بمانند: استایل‌های بحرانی که پیش از رندر اولیهٔ صفحه لازم‌اند، و اسکریپت‌هایی که رفتار اولیهٔ صفحه را تعیین می‌کنند مثل ابزارهای شخصی‌سازی‌سازی تم که اگر دیر بارگذاری شوند، کاربر پرش ظاهری می‌بیند. تفاوت این دو دسته در Core Web Vitals چیست و چرا گوگل بر آن تاکید دارد به‌عنوان بخشی از شاخص CLS توضیح داده شده است.

هدر، ویترین فوری صفحه است؛ فوتر، انبار پشتی. هر چیزی که در ویترین لازم نیست، جای طبیعی‌اش انبار پشتی است، نه اینکه در ویترین روی سر مشتری بیفتد.

همان‌طور که wp_head نقطهٔ رسمی تزریق در هدر است، وردپرس یک هوک اختصاصی برای فوتر هم در اختیار شما می‌گذارد: wp_footer. این هوک، درون تگ <body> و پیش از بستن آن، در قالب‌های استاندارد با فراخوانی تابع wp_footer() اجرا می‌شود. الگوی پایه:

add_action( 'wp_footer', 'wphk_add_custom_footer_code' );

function wphk_add_custom_footer_code() {
    // کدی که به فوتر اضافه می‌شود
}

سه نکتهٔ کلیدی در همین چهار خط. اول، هوک wp_footer یک Action است، نه Filter؛ بنابراین تابع شما مقدار بازگشتی ندارد و فقط کد تولید می‌کند. تفاوت دقیق این دو در تفاوت Action و Filter در وردپرس چیست با مثال توضیح داده شده است. دوم، اولویت پیش‌فرض ۱۰ است؛ اگر می‌خواهید کد شما پیش یا پس از کدهای دیگر بارگذاری شود، این عدد را تغییر دهید. توضیح کامل در Priority در هوک‌های وردپرس چیست آمده است. سوم، نام تابع با پیشوند یکتا (wphk_) انتخاب شده تا تعارض با افزونه‌های دیگر پیش نیاید. نحوۀ دقیق اتصال در نحوه استفاده از add_action در وردپرس آمده است.

یک نکتهٔ ظریف که در بعضی قالب‌ها دیده‌ام: اگر قالب به‌درستی wp_footer() را فراخوانی نکند، هوک شما اجرا نمی‌شود و هیچ پیام خطایی هم نمی‌بینید. علائم این مشکل در بحث چگونه یک قالب وردپرس استاندارد را تشخیص دهیم آمده است؛ قالب‌های استاندارد این تابع را همیشه در footer.php دارند.

ساده‌ترین اسنیپت: افزودن یک کد ثابت به فوتر

ساده‌ترین شکل استفاده، تزریق یک کد ثابت به فوتر است. مثال واقعی: افزودن ویجت چت پشتیبانی که در همهٔ صفحات لازم است:

/**
 * Snippet: Add chat widget to site footer.
 *
 * @since 2026-09-16
 * @author WordPressKar
 *
 * Purpose: Inject a chat widget script in the site footer.
 * Location: mu-plugins directory or child theme functions.php.
 */

add_action( 'wp_footer', 'wphk_add_chat_widget', 20 );

function wphk_add_chat_widget() {
    ?>
    <script async src="https://example.com/chat-widget.js"></script>
    <script>
        window.wphkChat = window.wphkChat || {};
        window.wphkChat.locale = 'fa-IR';
    </script>
    <?php
}

سه نکتهٔ کلیدی در این نمونه: اول، اولویت ۲۰ انتخاب شده تا کد پس از کدهای پایهٔ وردپرس و افزونه‌های دیگر بارگذاری شود. دوم، تزریق کد پیکربندی به‌صورت inline و پیش از بستهٔ اسکریپت — این ترتیب تضمین می‌کند که متغیرهای پیکربندی پیش از بارگذاری کتابخانهٔ اصلی در دسترس باشند. سوم، ساختار PHP با خروج موقت از حالت PHP برای تولید مستقیم HTML، خوانایی کد را بالا می‌برد و از پیچیدگی تزریق رشته‌ای جلوگیری می‌کند.

یک تصمیم ظریف که در پروژه‌های خودم زیاد به‌کار می‌برم: تزریق اسکریپت‌های پیکربندی به‌صورت inline و اسکریپت‌های اصلی با async. این ترکیب، اجرای رفتار اولیه را سریع می‌کند و در عین حال بارگذاری کتابخانه را بدون بلوکه‌کردن رندر انجام می‌دهد. اگر می‌خواهید تفاوت این دو ویژگی و کاربردشان را بشناسید، تحلیل کامل در افزونه‌های وردپرس چگونه روی سرعت سایت اثر می‌گذارند آمده است.

افزودن شرطی: فقط در صفحات لازم

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

add_action( 'wp_footer', 'wphk_conditional_footer_code' );

function wphk_conditional_footer_code() {
    if ( is_front_page() ) {
        ?>
        <script async src="https://example.com/home-only-widget.js"></script>
        <?php
    }

    if ( is_singular( 'post' ) ) {
        ?>
        <script>
            window.wphkReadingTracker = { enabled: true };
        </script>
        <?php
    }
}

سه نکتهٔ مهم در این الگو: اول، استفاده از شرط‌های بومی وردپرس که در لحظهٔ اجرای wp_footer به‌درستی مقدار می‌گیرند. دوم، تفکیک هر کد در بلوک مستقل که در آینده بتوان هرکدام را جداگانه تغییر داد. سوم، چنانچه کد شما شامل دادهٔ متغیر از دیتابیس است، آن را با esc_js، esc_html یا esc_attr پاک‌سازی کنید. اصول این پاک‌سازی در هوک‌های وردپرس و افزایش امنیت کد آمده است.

یک قاعدهٔ عملی: اگر کدی را در سه یا چند شرط مختلف نیاز دارید، به‌جای تکرار کد، آن را در یک تابع کمکی جدا بنویسید و در شرط‌ها فقط آن تابع را صدا بزنید. این الگو، هم خوانایی را بالا می‌برد و هم تغییرات آینده را ساده‌تر می‌کند. الگوهای مشابه در مهم‌ترین Action Hook های وردپرس آمده است.

روش حرفه‌ای: wp_enqueue_script با پارامتر in_footer

برای اسکریپت‌هایی که از یک URL خارجی بارگذاری می‌شوند، روش حرفه‌ای استفاده از wp_enqueue_script با پارامتر پنجم روی true است. این پارامتر، اسکریپت را به‌جای هدر، در فوتر بارگذاری می‌کند و به شما امکان می‌دهد از تمام مزایای مدیریت وابستگی و نسخه‌بندی وردپرس استفاده کنید:

add_action( 'wp_enqueue_scripts', 'wphk_enqueue_footer_script' );

function wphk_enqueue_footer_script() {
    if ( ! is_singular( 'post' ) ) {
        return;
    }

    wp_enqueue_script(
        'wphk-footer-widget',
        'https://example.com/footer-widget.js',
        array( 'jquery' ),
        '1.0.0',
        true
    );

    wp_localize_script( 'wphk-footer-widget', 'wphkFooterData', array(
        'postId' => get_the_ID(),
        'lang'   => get_bloginfo( 'language' ),
    ) );
}

سه نکتهٔ کلیدی در این الگو: اول، پارامتر پنجم روی true تنظیم شده تا اسکریپت در فوتر بارگذاری شود. اگر این پارامتر را ندید بگیرید یا false بگذارید، اسکریپت در هدر بارگذاری می‌شود و مسیر بحرانی رندر را می‌بندد. دوم، اعمال شرطی روی is_singular که اسکریپت را فقط در صفحات نوشته اعمال می‌کند و بار صفحه‌های دیگر را کاهش می‌دهد. سوم، استفاده از wp_localize_script که به‌جای تزریق مستقیم متغیرهای PHP در جاوااسکریپت، داده‌ها را به‌شکل امن به اسکریپت منتقل می‌کند. برای مطالعهٔ الگوهای مشابه، مهم‌ترین Action Hook های وردپرس مرجع خوبی است.

یک تذکر مهم در استفاده از این روش: پارامتر ششم در بعضی نسخه‌های وردپرس (پارامتر استراتژی) از نسخهٔ ۶.۳ اضافه شده و به شما اجازه می‌دهد استراتژی بارگذاری را نیز تنظیم کنید. ولی در اکثر پروژه‌های امروزی، همان پارامتر پنجم کافی است. اگر با نسخه‌های مختلف وردپرس کار می‌کنید، از این پارامتر اضافه صرف‌نظر کنید تا کد شما با نسخه‌های قدیمی هم سازگار بماند. برای مطالعهٔ بیشتر در این باره، چگونه سرعت سایت وردپرسی را افزایش دهیم نکات مفیدی دارد.

شش کاربرد رایج افزودن کد به فوتر

در پروژه‌های خودم، شش کاربرد رایج افزودن کد به فوتر را شناسایی کرده‌ام که هرکدام الگوی مشخصی دارند:

کاربرد اول: ویجت چت پشتیبانی

ویجت‌های چت مثل Crisp، Tawk.to یا Intercom، معمولاً یک اسکریپت خارجی دارند که باید در همهٔ صفحات بارگذاری شود ولی برای رندر اولیه ضروری نیست. الگوی درست: تزریق با wp_footer و async، بدون اعمال شرطی (چون در همهٔ صفحات لازم است).

کاربرد دوم: کدهای تحلیلی تأخیری

کدهای تحلیلی که به دقت میلی‌ثانیه‌ای نیاز ندارند، می‌توانند در فوتر بارگذاری شوند. الگوی درست: تزریق کد inline با wp_footer و اولویت پایین، بارگذاری اسکریپت اصلی با async. اگر می‌خواهید کد شما پس از کدهای تحلیلی افزونه‌های دیگر بارگذاری شود، اولویت را روی ۹۹ یا بالاتر تنظیم کنید.

کاربرد سوم: پاپ‌آپ‌ها و مودال‌ها

پاپ‌آپ‌های تبلیغاتی، خبرنامه، یا اطلاع‌رسانی، به‌دلیل ماهیت غیرحیاتی، جای طبیعی‌شان فوتر است. اعمال شرطی روی این کد می‌تواند جلوی نمایش پاپ‌آپ در صفحات پرترافیک مثل تسویه‌حساب را بگیرد.

کاربرد چهارم: کدهای A/B تست و شخصی‌سازی

کدهای A/B تست که تغییرات ظاهری را پس از بارگذاری صفحه اعمال می‌کنند، اگر در هدر باشند باعث پرش محتوا (CLS) می‌شوند. در فوتر، این مشکل کمتر می‌شود، هرچند که بهترین راه، اعمال تغییرات پیش از رندر است. تحلیل کامل این موضوع در Core Web Vitals چیست و چرا گوگل بر آن تاکید دارد آمده است.

کاربرد پنجم: اسکریپت‌های تأخیری برای بهینه‌سازی

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

کاربرد ششم: استایل‌های غیرحیاتی و کتابخانه‌های جانبی

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

انتخاب بین هدر و فوتر، یکی از پرتکرارترین تصمیم‌های توسعهٔ وردپرس است. معیار ساده‌ای که در پروژه‌های خودم به‌کار می‌برم، سه سؤال دارد:

سؤالاگر پاسخ بله →اگر پاسخ خیر →
آیا این کد برای رندر اولیهٔ صفحه حیاتی است؟هدرفوتر
آیا این کد بر ظاهر اولیهٔ صفحه اثر می‌گذارد؟هدرفوتر
آیا این کد به رخداد DOMContentLoaded یا DOM کامل وابسته است؟فوترهدر

این جدول، تصمیم را از «حس» به «معیار» تبدیل می‌کند. اگر به هر سه سؤال پاسخ روشنی داشته باشید، انتخاب درستی خواهید داشت. یک نکتهٔ ظریف: در برخی موارد، کد هم به هدر و هم به فوتر وابسته است. مثلاً یک اسکریپت تحلیلی که هم باید زود بارگذاری شود (هدر) و هم پس از DOM کامل داده‌ای به سرور بفرستد (فوتر). در این حالت، کد را به دو بخش تقسیم کنید: بارگذاری در هدر با async، و ارسال داده در فوتر با یک بلوک جدید. توضیح بیشتر در قطعه کد افزودن کد سفارشی به هدر وردپرس آمده است.

اثر فوتر بر سرعت و Core Web Vitals

فوتر، به‌طور طبیعی جای بهتری برای کدهای غیرحیاتی است؛ ولی این به‌معنای بی‌هزینه‌بودن نیست. سه نکتهٔ کارایی که در پروژه‌های خودم رعایت می‌کنم:

نکتهٔ اول: فوتر هم بخشی از مسیر بارگذاری است. اگر اسکریپت‌های سنگین در فوتر بارگذاری شوند، مرورگر پیش از اعلام «بارگذاری کامل» (load event) منتظر آن‌ها می‌ماند. این یعنی معیارهایی مثل TBT و INP ممکن است تحت تأثیر قرار بگیرند. راه‌حل: استفاده از async یا defer برای همهٔ اسکریپت‌های فوتر که به DOM وابسته نیستند.

نکتهٔ دوم: تفکیک اسکریپت‌های حیاتی و غیرحیاتی در فوتر. اگر سه اسکریپت در فوتر دارید که یکی از آن‌ها برای نمایش اولیهٔ یک ویجت در پایین صفحه لازم است، آن یکی را در فوتر با defer و بقیه را با async بارگذاری کنید. این تفکیک، تجربهٔ کاربر را نرم‌تر می‌کند.

نکتهٔ سوم: اندازهٔ کد inline. تزریق حجم زیادی کد inline در فوتر، خودش یک بار قابل‌توجه است. اگر کد شما بیش از حد بزرگ است، آن را به یک فایل خارجی منتقل کنید و با wp_enqueue_script بارگذاری کنید. تحلیل این موضوع در افزونه‌های وردپرس چگونه روی سرعت سایت اثر می‌گذارند آمده است.

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

در تجربهٔ من، سایت‌هایی که سه یا چهار اسکریپت در فوتر دارند، معمولاً در محدودهٔ سلامت سرعت هستند. سایت‌هایی که بیش از ده اسکریپت در فوتر دارند، معمولاً به افت Core Web Vitals می‌رسند و نیاز به بازبینی دارند. برای ابزارهای بررسی این وضعیت، بهترین ابزارهای تست سرعت سایت مرجع خوبی است.

امنیت و پایداری کدهای فوتر

کدهایی که به فوتر تزریق می‌شوند، دو ملاحظهٔ مهم دارند که تجربه‌ام در آن‌ها گران تمام شده:

ملاحظهٔ امنیتی: پاک‌سازی داده‌های متغیر

هر دادهٔ متغیری که در فوتر تزریق می‌شود، باید با توابع کدگذاری مناسب پاک‌سازی شود. یک نمونهٔ نادرست که در چند پروژه دیده‌ام: تزریق مستقیم دادهٔ کاربر در متغیر جاوااسکریپت که منجر به XSS می‌شود:

// نادرست:
add_action( 'wp_footer', function() {
    $user_name = wp_get_current_user()->display_name;
    echo '<script>var userName = "' . $user_name . '";</script>';
} );

// درست:
add_action( 'wp_footer', function() {
    $user_name = wp_get_current_user()->display_name;
    printf(
        '<script>var userName = "%s";</script>',
        esc_js( $user_name )
    );
} );

سه نکته در این مقایسه: اول، استفاده از esc_js برای متن داخل جاوااسکریپت. دوم، در زمینهٔ HTML از esc_html و در زمینهٔ ویژگی از esc_attr استفاده کنید. سوم، برای انتقال دادهٔ ساختاریافته (آرایه یا شیء)، از wp_json_encode استفاده کنید که خروجی امن تولید می‌کند. اصول جامع این پاک‌سازی در هوک‌های وردپرس و افزایش امنیت کد آمده است.

ملاحظهٔ پایداری: پرهیز از اتکا به ساختار قالب

کدی که به‌طور مستقیم در فایل footer.php قرار می‌گیرد، با تغییر قالب از بین می‌رود. راه‌حل: استفاده از هوک wp_footer که مستقل از قالب کار می‌کند. اگر مجبور به تغییر مستقیم قالب هستید، آن را در چایلد تم قرار دهید، نه در قالب والد. تفاوت این دو رویکرد در قالب وردپرس چایلد چیست و چه زمانی به آن نیاز داریم آمده است.

یک نکتهٔ دیگر از جنس پایداری: اگر کد شما به وجود افزونه‌ای وابسته است (مثلاً اسکریپت شما با یک افزونهٔ چت خاص کار می‌کند)، این وابستگی را در ابتدای کد بررسی کنید:

add_action( 'wp_footer', 'wphk_widget_integration' );

function wphk_widget_integration() {
    if ( ! defined( 'WPHK_WIDGET_VERSION' ) ) {
        return;
    }
    // ادامهٔ کد
}

این محافظت کوچک، در روزی که افزونهٔ وابسته غیرفعال شود، از خطاهای غیرقابل‌توضیح جلوگیری می‌کند.

محل درست قرارگیری این اسنیپت

مانند همهٔ اسنیپت‌های وردپرس، محل قرارگیری این کد هم تصمیم مهمی است. سه گزینه پیش روی شماست:

گزینهٔ اول: چایلد تم. اگر قالب سایت شما از ابتدا چایلد تم دارد، این اسنیپت را در فایل functions.php چایلد تم قرار دهید. در این حالت، کد شما با آپدیت قالب والد پاک نمی‌شود. ولی اگر روزی قالب را عوض کنید، کد باید منتقل شود. مناسب برای پروژه‌های کوچک و متوسط.

گزینهٔ دوم: افزونهٔ اختصاصی یا mu-plugins. این گزینه، پایدارترین مسیر برای کدهای مهم است. کد شما در یک افزونهٔ اختصاصی کوچک قرار می‌گیرد و مستقل از قالب زندگی می‌کند. اگر با ساختار افزونهٔ اختصاصی آشنا نیستید، کدنویسی اختصاصی برای افزونه وردپرس و ساختار فایل‌های یک افزونه استاندارد وردپرس مراجع کاملی هستند.

گزینهٔ سوم: افزونهٔ مدیریت اسنیپت. اگر می‌خواهید سریع شروع کنید و بعداً تصمیم بگیرید، این گزینه سبک‌ترین راه است. اگر با این رویکرد آشنا نیستید، چگونه قطعه کد وردپرس را ایمن اجرا کنیم نکات ایمنی مهمی دارد.

الگوی عملی من در پروژه‌های خودم: کدهای فوتر که بخشی از استراتژی بلندمدت سایت هستند — مثل ویجت چت یا کد تحلیلی — را در یک افزونهٔ اختصاصی کوچک نگه می‌دارم. کدهای آزمایشی و موقتی را با افزونهٔ مدیریت اسنیپت اعمال می‌کنم. و کدهای مرتبط با ظاهر و نمایش را در چایلد تم می‌گذارم. این تفکیک، تجربهٔ من می‌گوید که نگهداری ساده‌تر و پایداری بهتری می‌سازد. برای دیدن فهرست گسترده‌تری از اسنیپت‌های کاربردی، بهترین قطعه کدهای کاربردی وردپرس برای سایت‌ها مرجع خوبی است.

اشتباهات رایج در افزودن کد به فوتر

در بازبینی سایت‌های مختلف، شش اشتباه تکراری در این حوزه دیده‌ام که هرکدام درس‌آموز است:

اشتباهپیامد واقعیاصلاح
ویرایش مستقیم footer.php قالب والدناپدیدشدن کد با آپدیت قالباستفاده از هوک wp_footer یا چایلد تم
تزریق کد در همهٔ صفحات بدون شرطحجم بالای صفحه، افت سرعتشرط با is_front_page، is_singular و…
بارگذاری اسکریپت‌های فوتر بدون async یا deferتأخیر در پایان بارگذاری صفحه، افت TBTاستفاده از این ویژگی‌ها
تزریق دادهٔ کاربر بدون پاک‌سازیریسک XSSesc_js، esc_html، wp_json_encode
نبود بررسی وجود افزونهٔ وابستهخطاهای غیرقابل‌توضیح در صورت غیرفعال‌شدن افزونهdefined، class_exists، function_exists
نبود پیشوند اختصاصی در نام تابعتعارض با افزونه‌های دیگرپیشوند یکتا مثل wphk_

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

دو پروندهٔ واقعی از پروژه‌ها

برای این‌که این اصول در عمل روشن‌تر شوند، دو پروندهٔ واقعی از تجربهٔ خودم را مرور می‌کنم — بدون جزئیات هویتی، ولی با ساختار دقیق مشکل و راه‌حل.

پروندهٔ اول: ویجت چتی که سرعت را پایین آورده بود

در یک فروشگاه کوچک، ویجت چت پشتیبانی از ابتدا در هدر قرار داشت. مدتی بعد شکایت آمد که صفحهٔ محصول در موبایل کند است. بررسی با ابزارهای تست سرعت نشان داد اسکریپت چت پیش از رندر اولیه بارگذاری می‌شود و مسیر بحرانی را طولانی می‌کند. راه‌حل: انتقال اسکریپت به فوتر با async. نتیجه: LCP حدود ۷۰۰ میلی‌ثانیه در موبایل بهتر شد و ویجت بدون مشکل کار می‌کند. درس این پرونده: بعضی از پرمصرف‌ترین بهبودهای سرعت، از تصمیم‌های کوچک می‌آیند، نه از بازنویسی گسترده.

پروندهٔ دوم: اسکریپتی که در فوتر سه بار بارگذاری می‌شد

در یک سایت شرکتی با چند افزونه، گزارش آمد که سایت کندتر از حد معمول شده. بررسی در فهرست اسکریپت‌های فوتر نشان داد یک اسکریپت تحلیلی مشترک، سه بار با نام‌های مختلف از سه افزونهٔ متفاوت بارگذاری می‌شود. راه‌حل: غیرفعال‌کردن دو مورد از سه افزونه و نگه‌داشتن اسکریپت با تنظیمات یکپارچه. نتیجه: حجم صفحهٔ نهایی حدود ۱۵۰ کیلوبایت کاهش پیدا کرد. درس این پرونده: پیش از افزودن کد جدید به فوتر، فهرست کدهای موجود را مرور کنید تا کد شما با کدهای قبلی تعارض پیدا نکند. راهنمای ابزارهای این بررسی در دیباگ کردن Action و Filter در وردپرس آمده است.

این دو پرونده، نکتهٔ مشترک دارند: تصمیم‌های ظاهراً کوچک در افزودن کد به فوتر، وقتی درست گرفته شوند، اثر روزانهٔ بزرگی می‌سازند و وقتی بی‌دقت گرفته شوند، به بدهی فنی تبدیل می‌شوند.

خط پایانی و مسیر پیشنهادی

افزودن کد سفارشی به فوتر وردپرس، یکی از پرتکرارترین و در عین حال کم‌سروصداترین کارهای پروژه‌های وردپرسی است. مسیر درست این کار، استفاده از هوک wp_footer است، نه ویرایش مستقیم فایل footer.php قالب. کاربردهای اصلی — ویجت چت، کد تحلیلی تأخیری، پاپ‌آپ، A/B تست، اسکریپت‌های تأخیری و استایل‌های غیرحیاتی — هرکدام الگوی مشخصی دارند. سه ملاحظهٔ کارایی (استفاده از async و defer، اعمال شرطی و پرهیز از حجم بالای کد inline) به‌تنهایی می‌توانند تفاوت محسوسی در سرعت سایت بسازند. دو ملاحظهٔ امنیتی (پاک‌سازی داده‌های متغیر و بررسی وجود افزونهٔ وابسته) در همهٔ اسنیپت‌های فوتر باید رعایت شوند. و محل درست این اسنیپت، افزونهٔ اختصاصی یا چایلد تم است، نه فایل قالب والد.

گام بعدی عملی که پیشنهاد می‌کنم: در همین امروز، صفحهٔ اصلی و یک صفحهٔ داخلی سایت خودتان را باز کنید و در فهرست اسکریپت‌های انتهای صفحه (از طریق DevTools مرورگر یا ابزار تست سرعت) ببینید چه چیزهایی در فوتر بارگذاری می‌شوند. اگر تعدادشان بیش از سه یا چهار است، فهرست را مرور کنید و ببینید آیا می‌توانید بعضی از آن‌ها را با async یا با اعمال شرطی سبک‌تر کنید. اگر تجربه‌ای با افزودن کد به فوتر داشته‌اید — به‌ویژه اگر در پروژه‌ای با اسکریپت‌های زیادی در فوتر به نکته‌ای برخورده‌اید یا اگر روش تمیزی برای سازمان‌دهی کدهای فوتر در چند سایت پیدا کرده‌اید — برای من جالب است بدانید چطور حلش کردید. تجربهٔ خودتان را در دیدگاه‌ها بنویسید؛ به‌ویژه اگر اسنیپت مکمل دیگری می‌شناسید که برای خواننده‌های بعدی مفید است. 🧩