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

چرا تشخیص آرشیو برچسب اهمیت دارد؟

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

تابع is_tag چیست؟

تابع is_tag() یک تابع شرطی در هسته وردپرس است که در فایل wp-includes/query.php تعریف شده است. این تابع بررسی می‌کند که آیا صفحه فعلی یک آرشیو برچسب است یا نه. خروجی این تابع یک مقدار بولی است: true اگر صفحه فعلی آرشیو برچسب باشد و false در غیر این صورت. اگر آرگومان ورودی داده شود، تابع فقط زمانی مقدار true برمی‌گرداند که آرشیو فعلی مربوط به همان برچسب مشخص باشد. این تابع در قالب‌های کلاسیک، child theme‌ها و افزونه‌ها کاربرد گسترده دارد. برای مطالعه دقیق‌تر درباره ساختار قالب و فایل‌های آن، می‌توانید به راهنمای get_template_part مراجعه کنید.

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

امضای این تابع به‌شکل زیر است:
function is_tag( $tag = '' ) {
    global $wp_query;
    return $wp_query->is_tag( $tag );
}
پارامتر ورودی می‌تواند از چند نوع باشد: - خالی: هر آرشیو برچسب را می‌گیرد - عدد صحیح: شناسه (ID) برچسب - رشته: نامک (slug) برچسب - آرایه: فهرستی از شناسه‌ها یا نامک‌ها نکته مهم این است که اگر پارامتر رشته‌ای داده شود، وردپرس آن را به‌عنوان نامک تفسیر می‌کند، نه به‌عنوان نام نمایشی. بنابراین برای بررسی برچسب با نام نمایشی، باید ابتدا نامک آن را از طریق get_term_by() استخراج کرد.

سازوکار داخلی تابع

تابع is_tag() در واقع یک میان‌بر (Wrapper) برای متد is_tag() روی شیء جهانی $wp_query است. این متد در کلاس WP_Query تعریف شده و بررسی می‌کند که آیا کوئری فعلی یک آرشیو برچسب است یا نه. اگر پارامتر ورودی خالی باشد، متد is_tag() تنها بررسی می‌کند که متغیر tag در کوئری فعلی مقدار داشته باشد. اگر پارامتر داده شود، این متد بررسی می‌کند که آیا مقدار tag با مقدار داده‌شده مطابقت دارد یا نه. نکته کلیدی این است که این تابع تنها در حلقه اصلی (Main Query) قابل اتکاست. اگر از WP_Query سفارشی استفاده می‌کنید، ممکن است is_tag() نتایج نادرست برگرداند. برای مطالعه دقیق‌تر درباره کوئری سفارشی، می‌توانید به راهنمای WP_Query مراجعه کنید.

تفاوت is_tag با is_category و is_archive

تابع is_archive() هر نوع آرشیو را شامل می‌شود: آرشیو تاریخ، آرشیو نویسنده، آرشیو دسته‌بندی، آرشیو برچسب، آرشیو پست تایپ سفارشی و غیره. بنابراین اگر بخواهید فقط برچسب‌ها را هدف بگیرید، باید از is_tag() استفاده کنید. تابع is_category() مخصوص آرشیو دسته‌بندی است. تفاوت مفهومی مهمی بین این دو وجود دارد: دسته‌بندی ساختار سلسله‌مراتبی دارد و برای تقسیم‌بندی اصلی محتوا استفاده می‌شود، در حالی که برچسب تخت است و برای کلیدواژه‌های جانبی به کار می‌رود. برای مطالعه دقیق‌تر درباره سایر توابع شرطی، می‌توانید به راهنمای is_category، راهنمای is_archive و راهنمای is_single مراجعه کنید.

کاربردهای عملی در قالب

یکی از رایج‌ترین کاربردهای این تابع، تعیین استایل متفاوت برای آرشیو برچسب است. می‌توانید با استفاده از این تابع، کلاس CSS اختصاصی به بدنه اضافه کنید:
add_filter( 'body_class', 'myplugin_body_classes' );
function myplugin_body_classes( $classes ) {
    if ( is_tag() ) {
        $classes[] = 'tag-archive-page';
    }
    return $classes;
}
تابع body_class در راهنمای body_class به تفصیل بررسی شده است. کاربرد دیگر، نمایش محتوای اضافی در بالای آرشیو برچسب است. به‌عنوان مثال، می‌توانید توضیحات برچسب را که در پنل مدیریت وارد کرده‌اید، نمایش دهید:
if ( is_tag() ) {
    $tag_description = tag_description();
    if ( ! empty( $tag_description ) ) {
        echo '
' . esc_html( $tag_description ) . '
'; } }
توجه داشته باشید که استفاده از esc_html() برای جلوگیری از حملات XSS ضروری است. راهنمای این تابع در صفحه esc_html آمده است.

بررسی برچسب خاص با پارامتر

اگر بخواهید برای یک برچسب خاص، استایل یا رفتار متفاوتی پیاده کنید، از پارامتر استفاده کنید:
if ( is_tag( 'wordpress' ) ) {
    // کد فقط برای آرشیو برچسب با نامک wordpress اجرا می‌شود
}
برای بررسی چند برچسب همزمان، از آرایه استفاده کنید:
if ( is_tag( array( 'wordpress', 'seo', 'ai' ) ) ) {
    // کد اجرا می‌شود اگر آرشیو یکی از این برچسب‌ها باشد
}
برای استخراج اطلاعات کامل برچسب جاری، می‌توانید از get_queried_object() استفاده کنید که شیء ترم جاری را برمی‌گرداند.

نکات امنیتی و اشتباهات رایج

اشتباه اول، نبود شرط مناسب در قالب است. اگر از is_tag() در فایلی استفاده شود که فقط برای برچسب بارگذاری می‌شود (مثل tag.php)، این شرط زائد است، اما اگر در archive.php مشترک استفاده شود، شرط ضروری است. اشتباه دوم، نبود بررسی slug است. اگر بخواهید فقط برای یک برچسب خاص رفتار متفاوتی پیاده کنید و slug را اشتباه بنویسید، شرط هرگز اجرا نمی‌شود. اشتباه سوم، استفاده از این تابع در حلقه‌های سفارشی است. تابع is_tag() تنها برای حلقه اصلی معتبر است. اگر WP_Query سفارشی دارید، باید از wp_reset_query() استفاده کنید. اشتباه چهارم، نبود تست است. باید آرشیو برچسب را در محیط staging با چند برچسب مختلف تست کنید تا مطمئن شوید شرط‌ها به‌درستی عمل می‌کنند. اشتباه پنجم، نبود escape در خروجی است. توضیحات برچسب، نام برچسب و آدرس آن باید از توابع escape عبور کنند.

تحلیل فنی پیشرفته

در نگاه مهندسی، تابع is_tag() یک نقطه تصمیم (Decision Point) در لایه نمایش است که هم بر منطق قالب و هم بر تجربه کاربر اثر می‌گذارد. لایه اول لایه کوئری است. وردپرس با تجزیه URL و ساخت WP_Query، متغیر tag را در کوئری اصلی تنظیم می‌کند. سپس is_tag() بر اساس این متغیر تصمیم می‌گیرد. لایه دوم لایه قالب است. فایل tag.php اگر وجود داشته باشد، ابتدا بارگذاری می‌شود، سپس archive.php و در نهایت index.php. تابع is_tag() در هر یک از این فایل‌ها می‌تواند رفتار شرطی ایجاد کند. برای مطالعه درباره سلسله‌مراتب قالب، می‌توانید به راهنمای get_header و راهنمای get_footer مراجعه کنید. لایه سوم لایه کشینگ است. اگر صفحه آرشیو برچسب کش شود، ممکن است استایل‌های شرطی نیز کش شوند. این موضوع به‌خصوص در افزونه‌های کش و CDN باید در نظر گرفته شود. لایه چهارم لایه تست است. تست‌های End-to-End باید بررسی کنند که آیا آرشیو برچسب با استایل و رفتار مورد انتظار نمایش داده می‌شود یا نه. ابزارهایی مانند Playwright در ویکی‌پدیا برای این کار مناسب هستند. لایه پنجم لایه سئو است. آرشیو برچسب در برخی تنظیمات سئو می‌تواند مشکل‌ساز باشد. اگر بیش از حد برچسب داشته باشید، صفحات نازک (Thin Content) ایجاد می‌شود. برخی افزونه‌های سئو امکان noindex این صفحات را فراهم می‌کنند. برای مطالعه بیشتر روی این موضوع، می‌توانید به راهنمای سئوی صفحه‌بندی مراجعه کنید. در پروژه‌های Headless WordPress، این تابع در سمت بک‌اند اجرا می‌شود و فرانت‌اند ممکن است اصلاً از آن استفاده نکند. با این حال، در API می‌توان از این تابع برای تعیین نوع داده پاسخ استفاده کرد. برای مطالعه بیشتر درباره REST API به راهنمای register_rest_route مراجعه کنید.

پرسش‌های پرتکرار

تفاوت is_tag و is_archive چیست؟ is_archive هر نوع آرشیو را شامل می‌شود، اما is_tag فقط آرشیو برچسب را. آیا is_tag در حلقه سفارشی کار می‌کند؟ خیر، این تابع تنها بر پایه کوئری اصلی کار می‌کند. برای کوئری سفارشی باید از wp_reset_query() یا پارامترهای دیگر استفاده کرد. آیا می‌توان چند برچسب را همزمان بررسی کرد؟ بله، با پاس دادن آرایه. آیا is_tag در فایل tag.php زائد است؟ بله، چون این فایل تنها برای آرشیو برچسب بارگذاری می‌شود، اما در archive.php مشترک ضروری است. چطور بفهمیم کدام برچسب در حال نمایش است؟ با get_queried_object() که شیء ترم جاری را برمی‌گرداند.

نتیجه و مسیر ادامه

تابع is_tag() یک ابزار دقیق برای تشخیص آرشیو برچسب در وردپرس است. استفاده درست از آن یعنی درک دقیق تفاوت برچسب و دسته‌بندی، استفاده صحیح از پارامترها، escape در خروجی و تست در محیط واقعی. هر اشتباه کوچک می‌تواند به نمایش نادرست محتوا منجر شود. اگر این تابع را در پروژه‌ای واقعی به کار برده‌اید و رفتار غیرمنتظره‌ای دیده‌اید — به‌خصوص در Child Theme‌ها یا در ترکیب با کش — تجربه‌تان می‌تواند راهگشای دیگران باشد. کدام بخش بیشترین زمان را از شما گرفت؟ دیدگاه خود را بنویسید.