SHET28
English

ساخت قالب اختصاصی خطای 403 در وردپرس

ساخت قالب اختصاصی خطای 403 در وردپرس

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

توی این آموزش اول یک افزونه اختصاصی خیلی کوچک می‌سازیم که دو مسیر ثابت برای خطاهای ۴۰۳ و ۴۰۱ داره. بعد یکی از روش‌های Apache یا Nginx رو انتخاب می‌کنیم و وب‌سرور رو به این مسیرها وصل می‌کنیم. در آخر هم کد وضعیت واقعی رو از بخش Network مرورگر می‌خونیم تا مطمئن بشیم صفحه فقط ظاهر خطا رو نداره.

صفحه اختصاصی خطای ۴۰۴ در وردپرس
صفحه اختصاصی خطای ۴۰۴ در وردپرس

آنچه در این مقاله می‌خوانید

خطای ۴۰۳ و ۴۰۱ چه فرقی با هم دارن؟

خطای ۴۰۳ یعنی چی؟

کد ۴۰۳ یا Forbidden یعنی سرور درخواست رو فهمیده، ولی اجازه انجام اون رو نمی‌ده. برای نمونه، شاید دسترسی به یک پوشه بسته شده باشه یا یک قانون امنیتی جلوی نمایش صفحه رو گرفته باشه. تعریف دقیق این پاسخ توی استاندارد HTTP اومده.

خطای ۴۰۱ یعنی چی؟

کد ۴۰۱ یا Unauthorized برای حالتیه که کاربر باید با روش مشخصی هویتش رو ثابت کنه. پاسخ ۴۰۱ باید هدر WWW-Authenticate هم داشته باشه؛ یعنی سرور باید روش احراز هویت مورد انتظار رو معرفی کنه.

چه زمانی از صفحه ۴۰۳ یا ۴۰۱ استفاده کنیم؟

  • اگه کاربر حتی بعد از ورود هم اجازه دیدن منبع رو نداره، معمولاً ۴۰۳ انتخاب درستیه.
  • اگه منبع با احراز هویت HTTP محافظت شده و کاربر باید اطلاعات معتبر ارائه بده، ۴۰۱ کاربرد داره.
  • اگه صفحه پیدا نمی‌شه، باید از ۴۰۴ استفاده کنید؛ نه ۴۰۱ یا ۴۰۳.

صفحه ورود معمولی وردپرس معمولاً با ریدایرکت نمایش داده می‌شه و به پاسخ ۴۰۱ نیاز نداره. پس فقط برای نمایش پیام «وارد حساب بشید» کد ۴۰۱ نفرستید.

قبل از ساخت قالب اختصاصی خطای ۴۰۳ در وردپرس این نکته‌ها رو بدونید

چرا فایل‌های 403.php و 401.php خودکار اجرا نمی‌شن؟

وردپرس برای خطای ۴۰۴ فایل استاندارد 404.php رو توی سلسله‌مراتب قالب می‌شناسه. ولی فایل‌های 403.php و 401.php بخشی از این ساختار نیستن. پس ساختن این فایل‌ها داخل قالب، به‌تنهایی خطای واقعی سرور رو به اون‌ها وصل نمی‌کنه.

خطای ۴۰۳
خطای ۴۰۳

فرق خطای واقعی با صفحه‌ای که فقط ظاهر خطا رو داره

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

تشخیص Apache یا Nginx بودن وب‌سرور

نام وب‌سرور معمولاً توی بخش اطلاعات سرور پنل هاست دیده می‌شه. پشتیبانی هاست هم می‌تونه جواب قطعی رو بهتون بده. وجود فایل .htaccess به‌تنهایی Apache بودن ساختار نهایی رو ثابت نمی‌کنه؛ چون بعضی سرویس‌ها Nginx رو جلوی Apache قرار می‌دن.

قبل از شروع نسخه پشتیبان بگیرید

از فایل .htaccess یا تنظیمات فعلی وب‌سرور یک نسخه پشتیبان بگیرید. دسترسی به فایل‌منیجر یا FTP رو هم باز نگه دارید تا اگه سایت با خطای ۵۰۰ روبه‌رو شد، بتونید نسخه سالم رو برگردونید. بهتره این مسیر رو اول توی سایت آزمایشی انجام بدید.

ساخت صفحه اختصاصی خطای ۴۰۳ و ۴۰۱ در وردپرس

برای اینکه با عوض‌شدن قالب صفحه‌های خطا از بین نرن، مسیر و منطق اصلی رو داخل یک افزونه اختصاصی کوچک می‌ذاریم. این افزونه دو آدرس ثابت /error-pages/403/ و /error-pages/401/ رو می‌سازه و کد وضعیت درست رو می‌فرسته.

قدم اول: پوشه و فایل افزونه رو بسازید

توی مسیر wp-content/plugins یک پوشه با نام mihanwp-custom-error-pages بسازید. بعد داخل اون فایلی با نام mihanwp-custom-error-pages.php بسازید.

قدم دوم: کد افزونه رو داخل فایل بذارید

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

<?php
/**
 * Plugin Name: MihanWP Custom Error Pages
 * Description: Adds fixed internal pages for HTTP 403 and 401 responses.
 * Version: 1.0.0
 */

defined( 'ABSPATH' ) || exit;

function mihanwp_error_rewrite_rules() {
    add_rewrite_rule( '^error-pages/(403|401)/?$', 'index.php?mihanwp_error=$matches[1]', 'top' );
}
add_action( 'init', 'mihanwp_error_rewrite_rules' );

function mihanwp_error_query_vars( $vars ) {
    $vars[] = 'mihanwp_error';
    return $vars;
}
add_filter( 'query_vars', 'mihanwp_error_query_vars' );

function mihanwp_activate_error_pages() {
    mihanwp_error_rewrite_rules();
    flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'mihanwp_activate_error_pages' );

function mihanwp_deactivate_error_pages() {
    flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'mihanwp_deactivate_error_pages' );

function mihanwp_render_error_page() {
    $status = get_query_var( 'mihanwp_error' );

    if ( ! in_array( $status, array( '401', '403' ), true ) ) {
        return;
    }

    if ( '401' === $status ) {
        status_header( 401 );
        $title   = 'نیاز به احراز هویت';
        $message = 'برای دیدن این بخش باید از روش ورود تعیین‌شده توسط سرور استفاده کنید.';
    } else {
        status_header( 403 );
        $title   = 'دسترسی به این بخش بسته است';
        $message = 'شما اجازه دیدن این بخش رو ندارید.';
    }

    nocache_headers();
    header( 'X-Robots-Tag: noindex, nofollow', true );

    ?><!doctype html>
    <html <?php language_attributes(); ?>>
    <head>
        <meta charset="<?php bloginfo( 'charset' ); ?>">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title><?php echo esc_html( $title . ' | ' . get_bloginfo( 'name' ) ); ?></title>
        <style>
            body{margin:0;background:#f6f7f7;color:#1d2327;font-family:Tahoma,Arial,sans-serif;direction:rtl}
            main{max-width:680px;margin:10vh auto;padding:40px 24px;text-align:center}
            a{display:inline-block;margin-top:16px;padding:12px 20px;border-radius:8px;background:#2271b1;color:#fff;text-decoration:none}
        </style>
    </head>
    <body>
        <main>
            <h1><?php echo esc_html( $title ); ?></h1>
            <p><?php echo esc_html( $message ); ?></p>
            <a href="<?php echo esc_url( home_url( '/' ) ); ?>">برگشت به صفحه اصلی</a>
        </main>
    </body>
    </html><?php
    exit;
}
add_action( 'template_redirect', 'mihanwp_render_error_page', 0 );

این نمونه عمداً فقط عددهای ۴۰۱ و ۴۰۳ رو قبول می‌کنه. پس کاربر نمی‌تونه با یک پارامتر عمومی، هر کد دلخواهی رو از سایت بگیره. صفحه هم فایل‌های CSS یا JavaScript قالب رو بارگذاری نمی‌کنه تا احتمال خراب‌شدن ظاهرش زیر قانون‌های محدودکننده کمتر بشه.

قدم سوم: افزونه رو فعال کنید

وارد پیشخوان وردپرس بشید و از بخش «افزونه‌ها» افزونه MihanWP Custom Error Pages رو فعال کنید. فعال‌سازی افزونه قانون آدرس‌های تازه رو ثبت می‌کنه. بعد آدرس‌های /error-pages/403/ و /error-pages/401/ رو باز کنید و مطمئن بشید صفحه‌ها نمایش داده می‌شن.

اگه با خطای ۴۰۴ روبه‌رو شدید، وارد «تنظیمات ← پیوندهای یکتا» بشید و بدون تغییر گزینه‌ها، یک‌بار دکمه ذخیره رو بزنید. این کار قانون‌های آدرس وردپرس رو دوباره می‌سازه.

قدم چهارم: ظاهر صفحه رو شخصی‌سازی کنید

متن، رنگ پس‌زمینه و دکمه برگشت رو می‌تونید داخل همین فایل تغییر بدید. پیام خطا رو کوتاه نگه دارید و مسیر فایل، نام کاربری مدیر، نسخه نرم‌افزار یا جزئیات قانون امنیتی رو نشون ندید.

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

اتصال صفحه اختصاصی ۴۰۳ به Apache با فایل .htaccess

اگه وب‌سرورتون Apache یا LiteSpeed سازگار با Apache هست، می‌تونید با دستور ErrorDocument خطای واقعی ۴۰۳ رو به مسیر افزونه وصل کنید.

  1. فایل رو پیدا کنید: فایل .htaccess معمولاً توی پوشه اصلی وردپرس و کنار wp-config.php قرار داره. اگه اون رو نمی‌بینید، نمایش فایل‌های مخفی رو توی فایل‌منیجر روشن کنید.
  2. نسخه پشتیبان بگیرید: فایل فعلی رو دانلود کنید یا یک کپی امن از اون نگه دارید.
  3. دستور صفحه خطا رو اضافه کنید: خط زیر رو بیرون از بخش خودکار وردپرس، یعنی بیرون از محدوده # BEGIN WordPress و # END WordPress بذارید.
ErrorDocument 403 /error-pages/403/

این مسیر داخلیه و با / شروع می‌شه. URL کامل مثل https://example.com/error-pages/403/ رو جای اون نذارید؛ چون Apache ممکنه در این حالت ریدایرکت بفرسته و کد اصلی خطا حفظ نشه.

  1. تغییرات رو ذخیره کنید: صفحه اصلی، مدیریت وردپرس و آدرس خطا رو باز کنید. اگه خطای ۵۰۰ می‌بینید، نسخه قبلی فایل رو برگردونید.
  2. خطای واقعی رو آزمایش کنید: یک مسیر آزمایشی و غیرضروری بسازید که Apache واقعاً دسترسی به اون رو رد کنه. بعد کد پاسخ درخواست اصلی رو توی Network مرورگر ببینید.

اگه سرور اجازه استفاده از ErrorDocument توی .htaccess رو نمی‌ده، متن دستور و مسیر صفحه رو برای پشتیبانی هاست بفرستید تا اون رو توی تنظیمات فعال دامنه قرار بده.

اتصال صفحه اختصاصی ۴۰۳ به Nginx

Nginx فایل .htaccess رو نمی‌خونه. صفحه خطا توی این وب‌سرور با دستور error_page تعریف می‌شه و تغییر اون معمولاً به دسترسی مدیریت سرور نیاز داره.

  1. فایل تنظیمات دامنه رو پیدا کنید. محل دقیق فایل به سیستم‌عامل و پنل سرورتون بستگی داره.
  2. داخل بلوک server این دستور رو اضافه کنید:
error_page 403 /error-pages/403/;
  1. مطمئن بشید قانون‌های دیگه Nginx مسیر /error-pages/403/ رو دوباره مسدود یا به جای دیگه ریدایرکت نمی‌کنن.
  2. قبل از بارگذاری دوباره سرویس، ساختار تنظیمات رو با ابزار بررسی Nginx کنترل کنید.
  3. بعد از تأیید، Nginx رو با روش مناسب سرورتون دوباره بارگذاری کنید و پاسخ واقعی رو آزمایش کنید.

اگه هاست اشتراکی دارید و تنظیمات Nginx رو نمی‌بینید، از پشتیبانی بخواید دستور بالا رو برای دامنه اضافه کنه. تنظیم فایل اصلی سرور بدون شناخت ساختارش می‌تونه کل سایت رو از دسترس خارج کنه.

ساخت صفحه اختصاصی خطای ۴۰۱ در وردپرس

پاسخ ۴۰۱ فقط وقتی انتخاب درستیه که یک سازوکار واقعی احراز هویت HTTP داشته باشید. افزونه‌ای که ساختیم صفحه و کد ۴۰۱ رو آماده می‌کنه، ولی خودش سیستم احراز هویت نمی‌سازه و هدر مخصوص روش ورود رو حدس نمی‌زنه.

اتصال صفحه ۴۰۱ در Apache

ErrorDocument 401 /error-pages/401/

اتصال صفحه ۴۰۱ در Nginx

error_page 401 /error-pages/401/;

هدر WWW-Authenticate رو فراموش نکنید

طبق استاندارد پاسخ ۴۰۱، پاسخ ۴۰۱ باید هدر WWW-Authenticate مناسب داشته باشه. مقدار اون به روش احراز هویت واقعی سرورتون بستگی داره. نمونه زیر فقط شکل یک هدر برای روش Basic رو نشون می‌ده و کد آماده راه‌اندازی ورود نیست:

WWW-Authenticate: Basic realm="Protected Area"

این خط رو بدون تنظیم کامل احراز هویت کپی نکنید. اگه از روش ورود سرور مطمئن نیستید، ساخت و آزمایش پاسخ ۴۰۱ رو به مدیر سرور یا پشتیبانی هاست بسپارید. برای کاربری که وارد وردپرس شده ولی نقش اون اجازه دیدن یک بخش رو نداره، معمولاً ۴۰۳ معنی درست‌تری داره.

تنظیم عنوان و کد وضعیت صفحه خطا در وردپرس

توی افزونه نمونه، تابع status_header() قبل از هر خروجی HTML اجرا می‌شه و عنوان هم مستقیم داخل تگ title قرار می‌گیره. تابع nocache_headers() هم هدرهای وردپرس برای جلوگیری از نگهداری نامناسب پاسخ رو می‌فرسته.

مسیرها ثابت هستن و فقط مقدارهای ۴۰۱ و ۴۰۳ رو قبول می‌کنن. این روش از پارامتر عمومی و قابل‌تغییری مثل ?status= استفاده نمی‌کنه. بااین‌همه، تنظیمات کش سرور یا CDN ممکنه رفتار جداگانه‌ای داشته باشن؛ پس نتیجه نهایی رو حتماً از پاسخ واقعی بررسی کنید.

چطور صفحه خطای ۴۰۳ و ۴۰۱ رو آزمایش کنیم؟

  1. اول مسیر داخلی رو باز کنید: آدرس /error-pages/403/ رو باز کنید و مطمئن بشید صفحه اختصاصی بدون خطای ۴۰۴ نمایش داده می‌شه.
  2. یک محدودیت آزمایشی امن بسازید: قانون ۴۰۳ رو فقط روی پوشه یا آدرسی بذارید که سایت به اون وابسته نیست. روی wp-admin، wp-content یا فایل‌های اصلی آزمایش نکنید.
  3. ابزار مرورگر رو باز کنید: کلید F12 رو بزنید، وارد بخش Network بشید و صفحه آزمایشی رو دوباره بارگذاری کنید.
  4. درخواست اصلی رو انتخاب کنید: اولین درخواست از نوع Document رو باز کنید و عدد Status رو ببینید. برای صفحه ۴۰۳ باید ۴۰۳ باشه؛ نه ۲۰۰ یا یک ریدایرکت ۳۰۱ و ۳۰۲.
  5. حالت ناشناس رو هم امتحان کنید: صفحه رو توی پنجره ناشناس باز کنید تا نشست مدیر وردپرس نتیجه رو تغییر نده.
  6. نسخه موبایل و لینک برگشت رو ببینید: مطمئن بشید متن خونده می‌شه و دکمه صفحه اصلی به مسیر سالم می‌ره.
  7. کش رو پاک کنید: اگه پاسخ قدیمی می‌بینید، کش مرورگر، افزونه کش، CDN و کش سرور رو پاک کنید.

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

حل مشکل‌های رایج صفحه اختصاصی ۴۰۳ و ۴۰۱

آدرس صفحه خطا، خطای ۴۰۴ می‌ده

اول مطمئن بشید افزونه فعاله. بعد وارد «تنظیمات ← پیوندهای یکتا» بشید و یک‌بار تنظیمات رو ذخیره کنید. نام پوشه، فایل افزونه و آدرس /error-pages/403/ رو هم دوباره بررسی کنید.

صفحه پیش‌فرض هاست هنوز نمایش داده می‌شه

احتمالاً تنظیم برای وب‌سرور درست اعمال نشده. Nginx فایل .htaccess رو نمی‌خونه و بعضی هاست‌های Apache هم اجازه تغییر ErrorDocument رو نمی‌دن. از پشتیبانی بخواید تنظیم فعال همون دامنه رو بررسی کنه.

صفحه خطا به حلقه ریدایرکت می‌افته

این مشکل وقتی پیش میاد که خود مسیر خطا هم با همون قانون محافظت شده باشه. مسیرهای /error-pages/403/ و /error-pages/401/ رو از قانون محدودیت خارج کنید و از ریدایرکت چندمرحله‌ای برای نمایش خطا استفاده نکنید.

به‌جای ۴۰۳ یا ۴۰۱ کد ۲۰۰ برمی‌گرده

ممکنه یک افزونه، قانون ریدایرکت یا لایه کش کد پاسخ رو تغییر داده باشه. درخواست اصلی Document رو توی Network بررسی کنید. اگه مسیر داخلی درست جواب می‌ده ولی خطای واقعی ۲۰۰ می‌شه، تنظیم Apache یا Nginx رو دوباره بررسی کنید.

ویرایش .htaccess باعث خطای ۵۰۰ می‌شه

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

نکته‌های امنیتی برای صفحه‌های خطا

  • جزئیات داخلی رو نشون ندید: مسیر فایل، نسخه نرم‌افزار، نام کاربری، قانون فایروال و متن کامل خطای PHP نباید توی صفحه دیده بشه.
  • کد وضعیت رو از URL نگیرید: مسیرهای ثابت و مقدارهای محدود جلوی تولید پاسخ دلخواه رو می‌گیرن.
  • صفحه رو سبک نگه دارید: فایل‌های زیاد قالب ممکنه خودشون پشت محدودیت قرار بگیرن و صفحه رو ناقص نشون بدن.
  • خطا رو سمت سرور ثبت کنید: اگه گزارش لازم دارید، اطلاعات فنی ضروری رو توی لاگ امن سرور نگه دارید؛ نه توی متن عمومی صفحه.
  • روی سایت زنده آزمایش پرخطر انجام ندید: یک قانون اشتباه می‌تونه مدیریت وردپرس یا فایل‌های اصلی رو هم مسدود کنه.

صفحه خطای زیبا فقط بخش ظاهری امنیته. راهنمای امنیت وردپرس برای تازه‌کارها کمک می‌کنه بخش‌های مهم‌تر محافظت از سایتتون رو هم بشناسید.

جمع‌بندی

برای ساخت قالب اختصاصی خطای 403 در وردپرس، فایل 403.php به‌تنهایی کافی نیست. اول افزونه اختصاصی رو می‌سازید تا مسیر ثابت و خروجی امن داشته باشید. بعد خطای واقعی رو در Apache با ErrorDocument یا در Nginx با error_page به اون مسیر وصل می‌کنید.

برای پاسخ ۴۰۱ هم باید احراز هویت HTTP واقعی و هدر WWW-Authenticate درست داشته باشید. در پایان، درخواست اصلی رو توی Network بررسی کنید و مطمئن بشید کد نهایی واقعاً ۴۰۳ یا ۴۰۱ هست. یادتون نره قانون آزمایشی رو هم بعد از پایان کار حذف کنید.

سوالات متداول

آیا وردپرس فایل 403.php رو مثل 404.php خودکار اجرا می‌کنه؟

نه. فایل 403.php بخشی از سلسله‌مراتب استاندارد قالب وردپرس نیست. باید یک مسیر مشخص بسازید و خطای واقعی Apache یا Nginx رو به اون وصل کنید.

چرا صفحه خطا رو داخل افزونه اختصاصی ساختیم؟

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

از کجا بفهمیم سرور سایت Apache هست یا Nginx؟

نام وب‌سرور معمولاً توی اطلاعات سرور پنل هاست دیده می‌شه. چون بعضی سرویس‌ها چند وب‌سرور رو کنار هم استفاده می‌کنن، مطمئن‌ترین راه پرسیدن از پشتیبانی هاست هست.

چرا صفحه خطا نمایش داده می‌شه ولی کد پاسخ ۲۰۰ هست؟

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

برای خطای دسترسی از ۴۰۱ استفاده کنیم یا ۴۰۳؟

اگه کاربر باید با احراز هویت HTTP هویتش رو ثابت کنه، ۴۰۱ کاربرد داره. اگه سرور درخواست رو فهمیده ولی اجازه دسترسی نمی‌ده، معمولاً ۴۰۳ انتخاب درستیه.

اگه به تنظیمات Nginx دسترسی نداریم، چه کار کنیم؟

مسیر صفحه خطا و کد وضعیت مورد نظرتون رو برای پشتیبانی هاست بفرستید و بخواید دستور error_page رو توی تنظیمات فعال دامنه اضافه و آزمایش کنه.

نظر شما در این مورد چیه؟

  1. U17441۱۲ آبان ۱۳۹۹

    سلام
    با چه افزونه ای تیتر های مطالبتونو سمت چپ سایدبار نشون می دید؟

    • تیم پشتیبانیتیم پشتیبانی۱۲ آبان ۱۳۹۹

      سلام
      از افزونه table of contents استفاده کنید

      • U17441۱۲ آبان ۱۳۹۹

        خیلی ممنونم. پشتیبانیتون عالیه

        • رضا راد۱۳ آبان ۱۳۹۹

          سپاس از شما کاربر گرامی

      • U17441۱۲ آبان ۱۳۹۹

        ممنون، و این که چطور می‌تونم stickyش کنم؟
        ممنون از پاسخ‌گوییتون

        • رضا راد۱۳ آبان ۱۳۹۹

          توی گوگل سرچ کنید sidebar sticky js افزونه‌ها و کدهای جاوا اسکریپت زیادی هست.

پشتیبانپشتیبانپشتیبانپشتیبانپشتیبان
تیم میهن وردپرس
پشتیبانپشتیبانپشتیبانپشتیبانپشتیبان
تیم میهن وردپرسخارج از ساعات کاری هستیم؛ دستیار هوش مصنوعی پاسخگوی شماست.هوش مصنوعی

در حال بارگذاری...

هر سوالی دارید بپرسید.پاسخگوی شما هستیم.