ویژگی تصویر

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

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

تابع 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 به جای شرط‌های پراکنده استفاده کنید.

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

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

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