ویژگی تصویر

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

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

تابع is_single() یکی از conditional tags مهم وردپرس است که به شما کمک می‌کند تشخیص دهید صفحهٔ فعلی یک پست تکی (single post) از نوع “پست” (post) است یا خیر. این تابع در طراحی قالب، بارگذاری اسکریپت‌ها/استایل‌ها به صورت شرطی و نمایش محتوای ویژه برای پست‌های واحد بسیار پرکاربرد است. در ادامه کاربردها، مثال‌های عملی، تفاوت‌ها با توابع مشابه و نکات حرفه‌ای را بررسی می‌کنیم.

چیست و چه زمانی true برمی‌گرداند؟

is_single() زمانی مقدار true برمی‌گرداند که صفحهٔ جاری مربوط به یک پست تکی از نوع post باشد. این تابع صفحات (pages) را شامل نمی‌شود؛ اگر بخواهید هر نوع محتوای تک—including pages و attachments—را شناسایی کنید، از is_singular() استفاده کنید.

  • نوع محتوایی که is_single بررسی می‌کند: post (مقالات بلاگ)
  • شکاف با is_singular: is_singular برای هر نوع پست تک (page، attachment، CPT) true می‌شود.
  • پارامترها: می‌توانید id، slug یا عنوان (و حتی آرایه‌ای از آن‌ها) را به is_single بدهید.

سینتکس و پارامترها

تابع به شکل زیر فراخوانی می‌شود:

is_single();
is_single( 42 );
is_single( 'my-post-slug' );
is_single( array( 'first-post', 12, 97 ) );

توضیح: پارامتر می‌تواند عدد (ID)، رشته (slug یا عنوان) یا یک آرایه از آیدی‌ها/slugها باشد. اگر بدون پارامتر استفاده شود، برای هر پست تکی true برمی‌گردد.

مثال‌های عملی

مثال 1 — نمایش محتوای اضافه در داخل Loop

if ( is_single() ) {
    echo '<div class="post-note">این متن فقط در صفحهٔ پست تکی نمایش داده می‌شود.</div>';
}

توضیح: این بلوک در قالب‌هایی که داخل لوپ (Loop) اجرا می‌شود بررسی می‌کند آیا صفحه فعلی یک پست تکی است یا خیر و در صورت مثبت بودن متن اضافه را نمایش می‌دهد.

مثال 2 — بارگذاری اسکریپت فقط برای پست‌های مشخص

function my_enqueue_scripts() {
    if ( is_single( array( 42, 'special-post-slug' ) ) ) {
        wp_enqueue_script( 'my-special-js', get_template_directory_uri() . '/js/special.js', array('jquery'), '1.0', true );
    }
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_scripts' );

توضیح: این کد اسکریپت را فقط در صفحات پست با ID=42 یا slug=’special-post-slug’ بارگذاری می‌کند. توجه کنید که hook مناسب wp_enqueue_scripts است؛ اما گاهی لازم است شرط‌های شرطی را بعد از آماده‌شدن Query بررسی کنید تا اطمینان حاصل شود is_single مقدار واقعی بدهد.

مثال 3 — استفاده نادرست و اصلاح آن

// اشتباه — خیلی زود اجرا می‌شود و همیشه false برمی‌گرداند
add_action( 'init', function() {
    if ( is_single() ) {
        // این احتمالاً اجرا نمی‌شود
    }
} );

// اصلاح شده — بعد از parse_query یا در template_redirect بررسی می‌کنیم
add_action( 'template_redirect', function() {
    if ( is_single() ) {
        // امن و قابل اطمینان
    }
} );

توضیح: is_single بر پایهٔ main query عمل می‌کند؛ اگر پیش از parse_query یا template setup آن را فراخوانی کنید احتمالاً false دریافت می‌کنید. از همین رو hooks مثل template_redirect یا wp (پس از اجرای query) مناسب‌اند.

موارد کاربرد حرفه‌ای و نکات بهینه‌سازی

  • برای بارگذاری Assetها به صورت شرطی، همیشه از is_single در hook مناسب استفاده کنید تا بار اضافی روی صفحات دیگر کاهش یابد.
  • اگر قالب شما از Custom Post Type استفاده می‌کند و می‌خواهید آن‌ها را هم شامل کنید، از is_singular( ‘your_cpt’ ) یا get_post_type() استفاده کنید. is_single به‌صورت پیش‌فرض برای post است.
  • در تابع‌های مربوط به Query (مثلاً pre_get_posts) دقت کنید؛ استفاده نادرست ممکن است موجب loop ناخواسته یا مشکلات performance شود.
  • برای تولید کلاس بدنه یا تغییرات قالبی جزئی، is_single بسیار سریع و مؤثر است، اما از محاسبات سنگین داخل شرط خودداری کنید.

نمونه: قالب‌بندی متفاوت برای پست‌های خاص

if ( is_single() ) {
    // برای پست‌های معمولی
    get_template_part( 'content', 'single' );
} elseif ( is_page() ) {
    // برای صفحات
    get_template_part( 'content', 'page' );
} else {
    // سایر آرشیوها یا صفحه اصلی
    get_template_part( 'content', 'archive' );
}

توضیح: این الگو نشان می‌دهد چطور می‌توانید براساس نوع صفحه قطعات مختلف قالب را بارگذاری کنید. is_single تنها برای پست‌های بلاگ (post) اعمال می‌شود.

جدول مقایسه is_single، is_singular و is_page

تابعچه چیزی را تشخیص می‌دهدنمونه کاربرد
is_single()پست تکی از نوع post (مقالات بلاگ)نمایش کامنت‌های اضافی فقط در پست‌ها
is_singular()هر نوع پست تکی (post, page, CPT)بارگذاری اسکریپت برای هر صفحهٔ تک
is_page()صفحهٔ ایستا (page)نمایش قالب فرم تماس در صفحهٔ Contact

پرسش‌ها و اشکالات معمول

  • چرا is_single در my plugin مقدار false می‌دهد؟ — احتمالاً تابع زود اجرا شده است؛ از hooks مناسب (template_redirect یا wp) استفاده کنید.
  • آیا is_single برای Custom Post Type کار می‌کند؟ — به‌صورت پیش‌فرض برای post است؛ برای CPTها از is_singular(‘my_cpt’) استفاده کنید یا ترکیب is_single با get_post_type.
  • آیا می‌توان از آن در REST API استفاده کرد؟ — خیر؛ conditional tags مربوط به حلقه نمایش هستند و در context REST معمولاً معتبر نیستند.

نتیجه‌گیری

تابع is_single() ابزار ساده اما مؤثری برای تشخیص صفحات پست تکی در وردپرس است. با درک تفاوت‌های آن با is_singular و is_page و توجه به زمان مناسب فراخوانی، می‌توانید بارگذاری منابع، نمایش محتوا و رفتار قالب را بهینه‌تر و هدفمندتر کنید. برای کاربرد در سایت‌هایی با Custom Post Type یا منطق پیچیده توصیه می‌شود از ترکیب get_post_type() و is_singular استفاده شود تا کنترل کامل‌تری روی شرایط داشته باشید.

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

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