تابع is_tag در وردپرس
تابع is_tag() یکی از conditional tags مهم در وردپرس است که برای تشخیص صفحات آرشیو برچسب (Tag Archive) به کار میرود. در این مقاله به صورت کاربردی و با مثالهای واقعی توضیح میدهیم که is_tag() چگونه کار میکند، تفاوت آن با توابع مشابه، محدودیتها و الگوهای کاربردی برای توسعه قالب و افزونه را بررسی میکنیم.
چیست و چه زمانی بازمیگرداند؟
تابع is_tag( $tag = ” ) یک مقدار بولی (true/false) بازمیگرداند که میگوید آیا صفحه جاری یک آرشیو برچسب است یا خیر. پارامتر اختیاری $tag این امکان را میدهد تا بررسی را محدود به یک یا چند برچسب مشخص کنید.
| تابع | پارامتر | خروجی | کاربرد |
|---|---|---|---|
| is_tag() | یا خالی، یا رشته/آرایه/عدد (slug, name, ID) | true/false | تشخیص صفحه آرشیو برچسب |
تفاوت is_tag() با has_tag() و is_tax()
- is_tag(): بررسی میکند که صفحه فعلی خودِ آرشیو برچسب است یا نه (مثلاً URL مثل example.com/tag/news).
- has_tag(): بررسی میکند پست فعلی داخل حلقه آیا دارای برچسب مشخص هست یا خیر؛ مناسب برای صفحات single یا داخل لوپ.
- is_tax(): تابع عمومیتر برای تمامی taxonomyها است؛ is_tag() در واقع همانی برای taxonomy با نام post_tag است.
مثالهای کاربردی و کد
1) بررسی ساده در قالب برای نمایش هدر متفاوت در آرشیو یک برچسب خاص:
<?php
if ( is_tag( 'news' ) ) {
get_template_part( 'header', 'news' );
} else {
get_header();
}
?>توضیح: این کد چک میکند که آیا صفحهٔ آرشیوِ برچسب با slug برابر ‘news’ در حال نمایش است یا نه. اگر بله، فایل header-news.php بارگذاری میشود، در غیر این صورت header معمولی بارگذاری میشود.
2) بررسی چند برچسب با آرایه یا استفاده از شناسه:
<?php
if ( is_tag( array( 'news', 'updates', 12 ) ) ) {
// نمایش محتوا برای یکی از این برچسبها یا برچسب با ID=12
}
?>توضیح: پارامتر آرایهای اجازه میدهد چند slug یا ID را همزمان بررسی کنید. این کار برای تنظیمات شرطی انعطافپذیر مفید است.
3) استفادهٔ صحیح در هوک pre_get_posts برای تغییر کوئری در صفحۀ برچسب:
<?php
add_action( 'pre_get_posts', 'custom_tag_query' );
function custom_tag_query( $query ) {
if ( ! is_admin() && $query->is_main_query() && $query->is_tag( 'news' ) ) {
$query->set( 'posts_per_page', 12 );
}
}
?>توضیح: در هوک pre_get_posts بهتر است از property/متدهای شیء $query استفاده کنید (مثل $query->is_tag()) نه تابع is_tag()، چون conditional tags معمولاً به کوئری اصلی وابستهاند و داخل این هوک باید با شیء کوئری کار کنید. این مثال تعداد پست در صفحهٔ آرشیو برچسب ‘news’ را به 12 تغییر میدهد.
4) تفاوت با has_tag() — افزودن کلاس به پست اگر برچسب خاص دارد:
<?php
if ( has_tag( 'featured' ) ) {
echo '<div class="post featured">';
} else {
echo '<div class="post">';
}
?>توضیح: has_tag() برای بررسی برچسبهای پست جاری داخل حلقه مناسب است؛ برخلاف is_tag() که مربوط به صفحات آرشیو است.
موارد استفاده رایج در توسعه قالب و افزونه
- بارگذاری stylesheet یا اسکریپت اختصاصی برای صفحات برچسب خاص با wp_enqueue_scripts.
- تنظیم نحوهٔ نمایش آرشیوها (سفارشیسازی loop، pagination یا تعداد پستها).
- نمایش ویجت یا سایدبار متفاوت برای آرشیوهای برچسب مهم.
- هدایت کاربران یا ریدایرکت صفحات آرشیو خاص به صفحات سفارشی.
نکات حرفهای و بهترین شیوهها
- برای قالببندی خاص هر برچسب، از سلسلهمراتب قالب وردپرس استفاده کنید: tag-{slug}.php یا tag-{id}.php ابتدا بررسی میشوند و پس از آن tag.php و archive.php قرار دارند. این روش تمیزتر از قرار دادن شرطهای پیچیده در header.php است.
- در هوکها مثل pre_get_posts یا template_redirect به جای is_tag() از $query->is_tag() یا $wp_query->is_tag استفاده کنید تا مطمئن شوید به کوئری موردنظر اشاره دارید.
- از is_tag() برای تشخیص صفحهٔ آرشیو استفاده کنید؛ اگر قصد دارید بررسی کنید پست فعلی دارای برچسبی است از has_tag() یا has_term() استفاده کنید.
- در مواردی که با REST API یا کوئریهای سفارشی کار میکنید، conditional tags ممکن است کار نکند؛ بهتر است از پارامترهای query یا متدهای WP_Query استفاده کنید.
نمونه پیشرفته — افزودن کلاس به body برای آرشیوهای برچسب دلخواه
<?php
add_filter( 'body_class', 'custom_body_class_for_tags' );
function custom_body_class_for_tags( $classes ) {
if ( is_tag( array( 'news', 'special' ) ) ) {
$classes[] = 'tag-special-archive';
}
return $classes;
}
?>توضیح: این کد به کلاسهای بدنه سایت، کلاس اختصاصی ‘tag-special-archive’ را زمانی اضافه میکند که صفحهٔ جاری آرشیو یکی از برچسبهای ‘news’ یا ‘special’ باشد. سپس میتوانید CSS اختصاصی برای این صفحات بنویسید.
خلاصه و جمعبندی
تابع is_tag() ابزاری ساده اما حیاتی برای تشخیص صفحات آرشیو برچسب در وردپرس است. مهم است تفاوت آن با توابعی مثل has_tag() را بدانید و در هوکهای مربوط به کوئری از متدهای شیء $query استفاده کنید. برای پیادهسازیهای بزرگ و مدیریت بهتر کد، از قالبهای اختصاصی tag-{slug}.php یا tag.php به جای شرطهای پراکنده استفاده کنید.
با رعایت نکات بالا میتوانید نمایش، استایل و رفتار صفحات برچسب را بهصورت دقیق و بهینه کنترل کنید و تجربه کاربری بهتری برای بازدیدکنندگان سایتتان فراهم نمایید.
آیا این مطلب برای شما مفید بود ؟




