ویژگی تصویر

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

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

تابع has_post_thumbnail() یکی از توابع پایه‌ای وردپرس برای بررسی وجود تصویر شاخص (Featured Image) برای یک نوشته یا هر نوع پست سفارشی است. این تابع بسیار کاربردی است چون به قالب‌نویس اجازه می‌دهد که به صورت شرطی ساختار HTML، کلاس‌ها یا نمایش بلوک‌های تصویری را مدیریت کند.

پیش‌نیاز: فعال‌سازی پشتیبانی تصویر شاخص در قالب

قبل از استفاده از این تابع باید در فایل functions.php قالب تایع زیر را فراموش نکنید:

add_theme_support( 'post-thumbnails' );

این خط اجازه می‌دهد تا وردپرس برای پست‌ها تصویر شاخص ذخیره کند. بدون آن has_post_thumbnail() همیشه false برمی‌گرداند.

نحوۀ استفاده پایه

پرکاربردترین حالت استفاده هم در حلقه‌ی وردپرس (The Loop) و هم در خارج از آن با ارسال ID پست است:

if ( has_post_thumbnail() ) {
    the_post_thumbnail( 'medium' );
} else {
    echo '<img src="' . get_template_directory_uri() . '/images/default.jpg" alt="default">';
}

توضیح: این کد ابتدا چک می‌کند که آیا پست جاری تصویر شاخص دارد یا نه. اگر دارد، تصویر با اندازه‌ی «medium» نمایش داده می‌شود و در غیر این صورت یک تصویر پیشفرض از پوشۀ قالب چاپ می‌شود.

استفاده با WP_Query یا حلقه‌های سفارشی

در زمان استفاده از حلقه‌های سفارشی باید به شناسه پست دقت کنید:

$query = new WP_Query( array( 'post_type' => 'post', 'posts_per_page' => 5 ) );
if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        if ( has_post_thumbnail( get_the_ID() ) ) {
            echo get_the_post_thumbnail( get_the_ID(), 'thumbnail' );
        }
    }
}
wp_reset_postdata();

توضیح: در این نمونه با استفاده از get_the_ID() شناسه پست به has_post_thumbnail پاس داده شده تا در حلقۀ سفارشی نتیجه درست گرفته شود. پس از حلقه wp_reset_postdata فراخوانی می‌شود تا داده‌های اصلی بازیابی شوند.

بهینه‌سازی، امنیت و SEO تصاویر

  • همیشه از توابع وردپرس مثل get_the_post_thumbnail یا wp_get_attachment_image استفاده کنید تا attributes مثل srcset و sizes به درستی ساخته شود.
  • برای خروجی آدرس تصویر از esc_url() و برای alt از esc_attr() استفاده کنید.
  • برای لود تنبل (lazy loading) می‌توانید attribute loading=”lazy” اضافه کنید یا از native وردپرس (از نسخه‌های جدید) بهره ببرید.

نمونهٔ امن‌تر با wp_get_attachment_image

if ( has_post_thumbnail( $post_id ) ) {
    $thumb_id = get_post_thumbnail_id( $post_id );
    echo wp_get_attachment_image( $thumb_id, 'large', false, array( 'loading' => 'lazy', 'alt' => get_the_title( $post_id ) ) );
} else {
    echo '<img src="' . esc_url( get_template_directory_uri() . '/images/default.jpg' ) . '" alt="' . esc_attr( get_bloginfo('name') ) . '" loading="lazy">';
}

توضیح: این نسخه امن‌تر است چون از get_post_thumbnail_id برای گرفتن آیدی تصویر و از wp_get_attachment_image برای تولید HTML استاندارد تصویر بهره می‌برد. همچنین ویژگی loading=”lazy” و alt مناسب اضافه شده است. آدرس تصویر پیشفرض نیز با esc_url محافظت شده است.

کاربردهای پیشرفته و نکات تخصصی

  • انواع اندازه‌های سفارشی: با add_image_size می‌توانید اندازه‌های دلخواه بسازید و در the_post_thumbnail یا wp_get_attachment_image از آن‌ها استفاده کنید.
  • فروشگاه‌ها و پست‌تایپ‌ها: has_post_thumbnail برای هر post_type که support شده باشد کاربرد دارد؛ مثلاً محصولات ووکامرس.
  • فرخوانی ID دستی: has_post_thumbnail( $post_id ) برای نمایش تصویر در صفحات آرشیو، ویجت‌ها یا endpoint های JSON مفید است.
  • فولدینگ برای شبکه‌های اجتماعی: اگر تصویری نیست از الگوها یا متاهای اختصاصی برای کارت‌های Open Graph استفاده کنید تا تصویر اشتراک‌گذاری به‌درستی نمایش داده شود.

مقایسهٔ سریع توابع مرتبط

تابعهدفیادداشت
has_post_thumbnail()بررسی وجود تصویر شاخصبرمی‌گرداند true/false و می‌تواند $post_id بگیرد
the_post_thumbnail()چاپ مستقیم HTML تصویرخروجی را echo می‌کند
get_the_post_thumbnail()دریافت HTML تصویر به صورت رشتهبرای ذخیره یا پردازش قبل از echo کاربردی

مثال کاربردی: نشان دادن کلاس CSS متفاوت بر اساس وجود تصویر

$class = has_post_thumbnail() ? 'has-thumb' : 'no-thumb';
echo '<article class="' . esc_attr( $class ) . '">';
if ( has_post_thumbnail() ) {
    the_post_thumbnail( 'medium' );
}
echo '</article>';

توضیح: در این مثال از has_post_thumbnail برای تعیین یک کلاس CSS استفاده شده تا استایل دهی متفاوت هنگامی که تصویر وجود دارد یا ندارد، انجام شود. esc_attr برای جلوگیری از مشکلات امنیتی روی کلاس استفاده شده است.

نکات عملکردی و توصیه‌های پایانی

  • از اندازه‌های مناسب تصویر استفاده کنید تا بار صفحه سبک‌تر شود.
  • حتماً wp_reset_postdata بعد از حلقه‌های سفارشی فراخوانی شود تا وضعیت پست جاری به هم نخورد.
  • برای سئو، alt و title مناسب برای تصاویر در نظر بگیرید؛ wp_get_attachment_image کمک می‌کند تا srcset و sizes به درستی تولید شود.
  • در API REST، فیلد featured_media و meta مرتبط با تصویر شاخص را بررسی کنید تا اطلاعات تصویر در واکشی‌های JSON موجود باشد.

تابع has_post_thumbnail() ساده اما بسیار قدرتمند است و در هر پروژه وردپرسی که نیاز به نمایش شرطی تصویر شاخص دارد، کاربردی و ضروری است. با رعایت نکات امنیتی و بهینه‌سازی تصویر می‌توانید تجربه کاربری و سرعت سایت را بهبود ببخشید.

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

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