ویژگی تصویر

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

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

تابع get_comment_type() یکی از توابع کاربردی وردپرس برای تشخیص «نوع» یک نظر (Comment) است. با این تابع می‌توانید بفهمید یک آیتم نظر، نظر معمولی است یا پیگ‌بک (pingback) یا ترک‌بک (trackback) یا حتی نوع دلخواهی که افزونه‌ها اضافه کرده‌اند. دانستن نوع نظر در طراحی قالب، فیلتر کردن نظرات و گزارش‌گیری بسیار مفید است.

چه مقادیری برمی‌گردد؟

  • comment — معمولاً برای نظرات عادی (در بعضی نسخه‌ها مقدار پیش‌فرض دیتابیس رشته خالی است ولی تابع معمولاً به‌صورت منطقی «comment» را نشان می‌دهد).
  • pingback — پیگ‌بک‌ها که از سایت‌های دیگر لینک گرفته شده‌اند.
  • trackback — ترک‌بک‌ها که روش قدیمی‌تر همیناد به محتوای دیگر است.
  • انواع سفارشی — افزونه‌ها می‌توانند نوع دلخواهی اضافه کنند (مثلاً review، order_note و غیره).

امضای تابع و نکات کاربردی

تابع به این شکل فراخوانی می‌شود: get_comment_type( $comment ); پارامتر می‌تواند شناسه (ID) یا شیء (object) یا حذف شده باشد (null) که در این صورت از بیزارد فعلی استفاده می‌کند. اگر ورودی نامعتبر باشد مقدار خالی یا رشته بازگردانده می‌شود؛ پس همیشه بهتر است قبل از استفاده چک کنید.

نمونه‌های عملی و کد

1) اضافه کردن کلاس بر اساس نوع نظر

 <li class="comment <?php echo esc_attr( get_comment_type() ); ?>" id="comment-<?php comment_ID(); ?>">
     <?php comment_text(); ?>
 </li>

این قطعه در فایل comments.php قالب قرار می‌گیرد. خروجی کلاس می‌تواند به شکل “comment”, “pingback” یا “trackback” باشد و با CSS می‌توانید هر نوع را متفاوت استایل دهید.

2) نمایش متفاوت برای پینگ‌بک‌ها

function my_custom_comment_display( $comment, $args, $depth ) {
    $type = get_comment_type( $comment );
    if ( 'pingback' === $type || 'trackback' === $type ) {
        echo '<li class="ping">Ping/Trackback: ';
        comment_author_link( $comment );
        echo '</li>';
        return;
    }
    // نمایش حالت عادی برای نظرات معمولی
    echo '<li class="regular-comment">';
    comment_text( $comment );
    echo '</li>';
}

در این نمونه یک callback برای wp_list_comments نوشته‌ایم که پینگ‌بک و ترک‌بک را جدا نمایش می‌دهد و نظرات معمولی را به صورت پیش‌فرض رندر می‌کند.

3) شمارش تعداد هر نوع نظر برای یک نوشته

$comments = get_comments( array( 'post_id' => $post_id, 'status' => 'approve' ) );
$counts = array( 'comment' => 0, 'pingback' => 0, 'trackback' => 0 );

foreach ( $comments as $c ) {
    $t = get_comment_type( $c );
    if ( ! isset( $counts[ $t ] ) ) {
        $counts[ $t ] = 0;
    }
    $counts[ $t ]++;
}

کد بالا همه نظرات تاییدشده را گرفته و با استفاده از get_comment_type() تعداد هر نوع را می‌شمارد. می‌توانید از این آمار برای نمایش تب‌بندی نظرات یا گزارش‌گیری استفاده کنید.

4) فیلتر کردن نظرات در کوئری (بهینه‌تر)

$only_pings = get_comments( array( 'post_id' => $post_id, 'type' => 'pings', 'status' => 'approve' ) );
$only_comments = get_comments( array( 'post_id' => $post_id, 'type' => 'comment', 'status' => 'approve' ) );

اگر هدف فقط دریافت یک نوع خاص است، بهتر است از پارامتر type در get_comments استفاده کنید تا روی کوئری دیتابیس فیلتر انجام شود و نیاز به محاسبه در PHP نباشد.

جداول مرجع — انواع رایج

نوعتوضیح
commentنظر معمولی کاربران در پست‌ها یا صفحات
pingbackاطلاعیه لینک‌دهی از سایت خارجی
trackbackروش قدیمی‌تر اطلاع‌رسانی لینک‌دهی

نکات پیشرفته / تخصصی

  • حفظ امنیت: هرگاه نتیجه get_comment_type() را در خروجی HTML قرار می‌دهید، از توابعی مثل esc_attr() یا esc_html() استفاده کنید تا تزریق کد جلوگیری شود.
  • پرفورمنس: get_comment_type() بسیار سبک است؛ اما اگر در حلقه‌ای بزرگ صدها بار فراخوانی می‌شود و نیاز به عملیات پیچیده دارید، بهتر است از get_comments با type فیلتر شده استفاده کنید تا بار دیتابیس کمتر شود.
  • قابلیت توسعه: افزونه‌ها می‌توانند comment_type سفارشی تعریف کنند؛ بنابراین همیشه برای انواع ناشناخته کد را طوری بنویسید که قابل توسعه باشد (مثلاً اگر نوع جدیدی دیدید به‌صورت عمومی نمایش داده شود).
  • مقادیر خالی: در برخی مواقع نوع نظر در دیتابیس خالی ذخیره می‌شود. تابع get_comment_type معمولاً آن را به صورت “comment” تفسیر می‌کند، اما بهتر است در کد خود هم for fallback بررسی کنید.

مثال عملی: جدا کردن نمایش نظرات و پینگ‌ها

if ( have_comments() ) {
    $comments_by_type = separate_comments( $comments );
    if ( ! empty( $comments_by_type['comment'] ) ) {
        wp_list_comments( array( 'style' => 'ol', 'short_ping' => true ), $comments_by_type['comment'] );
    }
    if ( ! empty( $comments_by_type['pings'] ) ) {
        echo '<h3>پینگ‌بک‌ها و ترک‌بک‌ها</h3>';
        wp_list_comments( array( 'callback' => 'my_custom_comment_display' ), $comments_by_type['pings'] );
    }
}

در این سناریو از تابع separate_comments استفاده شده که آرایه‌ای شامل comments و pings برمی‌گرداند. سپس با استفاده از get_comment_type یا callback، نمایش را جدا می‌کنیم تا UX بهتر شود.

FAQ سریع

  • آیا می‌توان نوع جدید تعریف کرد؟ بله، افزونه‌ها می‌توانند مقدار comment_type را هنگام درج نظر تعیین کنند و بنابراین get_comment_type مقدار دلخواه را بازمی‌گرداند.
  • آیا get_comment_type همیشه مقدار برمی‌گرداند؟ اگر پارامتر اشتباه باشد یا شیء یافت نشود ممکن است مقدار خالی بازگردد؛ بنابراین چک وجود/اعتبار لازم است.
  • بهترین روش برای استایل‌دهی پینگ‌بک‌ها چیه؟ از کلاس مبتنی بر get_comment_type در markup استفاده کنید و در CSS برای .pingback یا .trackback استایل بنویسید.

جمع‌بندی: تابع get_comment_type() ابزار ساده اما قدرتمندی برای تشخیص نوع نظرات در وردپرس است. از آن در قالب‌ها، callbackهای wp_list_comments، فیلترها و گزارش‌گیری استفاده کنید تا کنترل دقیق‌تر و ظاهر مناسب‌تری برای انواع مختلف نظرات داشته باشید.

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

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