تابع is_tag چطور کار میکند؟
تابع is_tag برای تشخیص آرشیو برچسب در وردپرس؛ بررسی پارامترها، نکات کلیدی، کاربردهای شرطی و اشتباهات رایج در قالبنویسی.
چرا تشخیص آرشیو برچسب اهمیت دارد؟
در وردپرس، هر برچسب یک صفحه آرشیو اختصاصی دارد که همه نوشتههای مرتبط با آن برچسب را فهرست میکند. این صفحه، برخلاف دستهبندی که سلسلهمراتبی است، ماهیتی تخت دارد و معمولاً برای موضوعات جانبی، کلیدواژههای ثانویه و مفاهیم مکمل استفاده میشود. اگر در قالب، صفحه برچسب را از دستهبندی تشخیص ندهیم، نمیتوانیم طراحی و تجربه کاربری متفاوتی برای آن بسازیم. برای نمونه، ممکن است بخواهیم در بالای آرشیو برچسب، توضیح کوتاهی درباره آن برچسب نمایش دهیم و در آرشیو دستهبندی، ساختار متفاوتی پیاده کنیم. تابع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ها یا در ترکیب با کش — تجربهتان میتواند راهگشای دیگران باشد. کدام بخش بیشترین زمان را از شما گرفت؟ دیدگاه خود را بنویسید.