ویژگی تصویر

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

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

تابع remove_theme_support() در وردپرس ابزاری ساده اما قدرتمند برای غیرفعال کردن قابلیت‌هایی است که قالب (یا یک افزونه) با add_theme_support() فعال کرده است. این تابع به توسعه‌دهندگان و طراحان قالب اجازه می‌دهد تا کنترل دقیق‌تری روی امکانات قالب داشته باشند؛ مثلاً حذف پشتیبانی از تصاویر شاخص، هدر سفارشی یا پشتیبانی HTML5 در شرایط خاص.

مکان و زمان مناسب فراخوانی

  • همیشه remove_theme_support() را در هوک after_setup_theme اجرا کنید.
  • اگر می‌خواهید قابلیت اضافه‌شده توسط قالب والد را حذف کنید (در قالب فرزند)، باید پس از اضافه شدن والد اجرا شود—بنابراین از priority بالاتر (مثلاً 11 یا 20) استفاده کنید.
  • برای برخی حالات شرطی (مثلاً فقط در پیش‌نمایش سفارشی‌سازی) می‌توانید بررسی‌هایی مثل is_customize_preview() یا is_admin() لازم داشته باشید.

نمونه پایه در functions.php

add_action( 'after_setup_theme', 'my_child_remove_supports', 11 );
function my_child_remove_supports() {
    remove_theme_support( 'post-thumbnails' );
    remove_theme_support( 'custom-header' );
}

این کد مثال ساده‌ای است که در قالب فرزند اجرا می‌شود و پشتیبانی از تصاویر شاخص (post-thumbnails) و هدر سفارشی (custom-header) را حذف می‌کند. اولاً از after_setup_theme با اولویت 11 استفاده شده تا اطمینان حاصل شود کد پس از اجرای کد قالب والد اجرا می‌شود. اگر از اولویت پیش‌فرض (10) استفاده کنید و والد بعداً پشتیبانی را اضافه کند، حذف انجام نخواهد شد.

تفاوت remove_theme_support و توابع مرتبط

  • remove_theme_support() برای حذف پشتیبانی کلی قالب است. برای حذف پشتیبانی از یک قابلیت در یک نوع نوشته خاص باید از remove_post_type_support() استفاده کنید.
  • برای ویژگی‌هایی که با add_theme_support با آرایه مقداردهی شده‌اند (مثل html5) ممکن است نیاز به مدیریت پیچیده‌تری باشد—مثلاً برداشتن یکی از عناصر در آرایه.

حذف یک مورد از مجموعه HTML5 (مثال پیشرفته)

// حذف فقط search-form از پشتیبانی html5
add_action( 'after_setup_theme', 'remove_html5_search', 11 );
function remove_html5_search() {
    $support = get_theme_support( 'html5' ); // ممکن است آرایه یا false باشد
    if ( $support && is_array( $support[0] ) ) {
        $items = $support[0];
        // حذف 'search-form' اگر وجود داشته باشد
        $items = array_diff( $items, array( 'search-form' ) );
        // ابتدا تمام پشتیبانی html5 را حذف می‌کنیم
        remove_theme_support( 'html5' );
        // سپس مجدداً با آیتم‌های تغییر کرده اضافه می‌کنیم
        add_theme_support( 'html5', $items );
    }
}

در این مثال ما ابتدا get_theme_support(‘html5’) را می‌خوانیم که ساختار آن اغلب آرایه‌ای است داخل آرایه. سپس عنصر موردنظر را با array_diff حذف کرده و کل پشتیبانی html5 را remove و مجدداً add می‌کنیم تا فقط آن بخش خاص حذف شود. این رویکرد زمانی لازم است که add_theme_support با آرایه‌ای از قابلیت‌ها صدا زده شده باشد.

مثال: حذف پشتیبانی و نگه‌داشتن آن در سفارشی‌ساز

add_action( 'after_setup_theme', 'conditional_remove_support', 11 );
function conditional_remove_support() {
    // اگر در سفارشی‌ساز هستیم، پشتیبانی را حذف نکن
    if ( is_customize_preview() ) {
        return;
    }
    remove_theme_support( 'custom-logo' );
}

گاهی لازم است قابلیت‌ها در پیش‌نمایش سفارشی‌ساز دردسترس باشند تا کاربر تنظیمات را ببیند. در این کد ما بررسی می‌کنیم که اگر در سفارشی‌ساز هستیم، از حذف custom-logo صرف‌نظر کنیم؛ در غیر این صورت پشتیبانی حذف می‌شود.

موارد کاربردی و سناریوهای واقعی

  • در قالب فرزند: حذف امکانات ناخواسته قالب والد بدون ویرایش فایل‌های والد.
  • سفارشی‌سازی برای یک سایت شرکتی: غیرفعال کردن post-formats یا post-thumbnails در صورت عدم نیاز.
  • بهینه‌سازی تجربه و سازگاری با پلاگین‌ها: مثلاً حذف ویرایشگر بلوکی ابزارک‌ها (widgets-block-editor) اگر با طراحی سایت تداخل دارد.
  • مدیریت جلوه‌های بصری: غیرفعال کردن align-wide یا قابلیت‌های گوتنبرگ که قالب از آن پشتیبانی می‌کند اما شما می‌خواهید آنها را محدود کنید.

نکات فنی و بهترین شیوه‌ها

  • همیشه قبل از remove_theme_support، بررسی کنید که قالب واقعاً آن پشتیبانی را اضافه کرده باشد. تابع current_theme_supports() یا get_theme_support می‌تواند کمک کند.
  • برای تغییرات جزئی در پشتیبانی‌هایی که با آرایه اضافه شده‌اند، از الگوی «خواندن—تغییر—حذف—اضافه مجدد» استفاده کنید (مثال html5).
  • اگر حذف قابلیت ممکن است باعث ناسازگاری افزونه‌ها شود، به جای حذف کامل، در لایه نمایش (template) آن خروجی را کنترل کنید یا از فیلترها بهره ببرید.
  • برای انطباق با بروزرسانی‌های آینده قالب والد، مستندسازی تغییرات در قالب فرزند را فراموش نکنید—چرا که ممکن است قالب والد در آینده رفتار خودش را تغییر دهد.

کدام امکانات را نباید حذف کنید؟

هر قابلیتی که افزونه‌ها یا بخش‌های هسته وردپرس روی آن تکیه دارند را با احتیاط حذف کنید. مثلاً حذف title-tag می‌تواند SEO سایت را تحت تأثیر قرار دهد مگر اینکه کنترل کامل تگ عنوان را به عهده بگیرید. بهتر است در شرایطی که مطمئن نیستید، ابتدا تست در محیط توسعه انجام دهید.

جمع‌بندی

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

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

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

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