ویژگی تصویر

تابع get_comments در وردپرس

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

تابع get_comments() یکی از توابع قدرتمند وردپرس برای دریافت نظرات (Comments) از پایگاه داده است. این تابع به توسعه‌دهندگان اجازه می‌دهد تا نظرات کاربران را بر اساس پارامترهای مختلف (مانند شناسه نوشته، نویسنده نظر، وضعیت تایید و…) فراخوانی و مدیریت کنند. در این مقاله، با ساختار و نحوه استفاده از این تابع به‌صورت کامل آشنا می‌شویم و روش‌های بهینه‌سازی، فیلترگذاری و نمایش آن را بررسی می‌کنیم.

کاربرد تابع get_comments()

تابع get_comments() زمانی کاربرد دارد که بخواهیم نظرات را در قالبی سفارشی نمایش دهیم یا از آن‌ها در بخش‌های مختلف سایت مانند ویجت‌ها، افزونه‌ها یا بخش‌های آماری استفاده کنیم. برخلاف توابعی مانند comments_template() که به‌طور خودکار نظرات را چاپ می‌کند، این تابع فقط داده‌ها را بازمی‌گرداند و ما می‌توانیم آن‌ها را با منطق و طراحی دلخواه نمایش دهیم.

ساختار کلی تابع

get_comments( array $args = array() )

این تابع آرایه‌ای از آرگومان‌ها (پارامترها) را دریافت می‌کند که مشخص می‌کند چه نوع نظراتی باید بازیابی شوند. نتیجه اجرای آن، آرایه‌ای از آبجکت‌های نوع WP_Comment است که هرکدام شامل اطلاعات یک نظر می‌باشند.

مثال ساده از استفاده


$comments = get_comments( array(
    'post_id' => 42,
    'status'  => 'approve',
) );

foreach ( $comments as $comment ) {
    echo '<p>' . $comment->comment_author . ': ' . $comment->comment_content . '</p>';
}

در این مثال، تمامی نظرات تاییدشده مربوط به پست با شناسه ۴۲ دریافت و در یک حلقه نمایش داده می‌شوند. توجه کنید که تابع خروجی را چاپ نمی‌کند؛ بلکه فقط داده‌ها را برمی‌گرداند تا بتوانید آن را در قالب دلخواه نمایش دهید.

پارامترهای مهم تابع get_comments()

پارامترتوضیحمثال
post_idشناسه پست یا صفحه‌ای که نظرات آن باید بازیابی شوند.'post_id' => 10
statusوضعیت نظر (مانند approve، hold یا spam).'status' => 'approve'
numberتعداد نظراتی که باید برگردانده شوند.'number' => 5
author_emailفیلتر بر اساس ایمیل نویسنده نظر.'author_email' => 'example@email.com'
orderbyمرتب‌سازی بر اساس فیلد خاصی مانند comment_date یا comment_author.'orderby' => 'comment_date'
orderجهت مرتب‌سازی (صعودی یا نزولی).'order' => 'DESC'

نمونه کاربردی‌تر با فیلترهای ترکیبی


$args = array(
    'post_id'    => 50,
    'status'     => 'approve',
    'number'     => 10,
    'orderby'    => 'comment_date_gmt',
    'order'      => 'DESC',
    'author__in' => array(2, 3, 4),
);
$comments = get_comments( $args );

foreach ( $comments as $comment ) {
    echo '<div class="comment-item">';
    echo '<strong>' . esc_html( $comment->comment_author ) . '</strong>';
    echo '<p>' . esc_html( $comment->comment_content ) . '</p>';
    echo '</div>';
}

در این نمونه، ما نظرات تاییدشده مربوط به نویسندگان خاص (با شناسه‌های ۲، ۳ و ۴) را برای پست شماره ۵۰ دریافت می‌کنیم. استفاده از توابعی مانند esc_html() برای افزایش امنیت و جلوگیری از تزریق کد (XSS) توصیه می‌شود.

فیلترگذاری و سفارشی‌سازی نتایج

وردپرس برای توسعه‌پذیری بیشتر، از فیلترهایی استفاده می‌کند که قبل و بعد از دریافت داده‌ها اعمال می‌شوند. یکی از مهم‌ترین فیلترها، comments_clauses است که به ما اجازه می‌دهد پرس‌و‌جوی SQL مربوط به دریافت نظرات را تغییر دهیم.


add_filter( 'comments_clauses', 'my_custom_comment_query', 10, 2 );

function my_custom_comment_query( $clauses, $comment_query ) {
    global $wpdb;
    $clauses['where'] .= " AND {$wpdb->comments}.comment_author LIKE '%John%'";
    return $clauses;
}

در این کد، فقط نظراتی نمایش داده می‌شوند که نام نویسنده شامل کلمه “John” باشد. استفاده از این روش نیاز به درک ساختار SQL و امنیت دارد، زیرا تغییر اشتباه در شرط‌ها می‌تواند باعث خطا یا ضعف امنیتی شود.

نکات امنیتی در استفاده از get_comments()

  • همیشه از توابع پاک‌سازی (Sanitization) مانند esc_html() یا wp_kses() برای خروجی استفاده کنید.
  • از ارسال مستقیم داده‌های کاربر به آرگومان‌های تابع بدون اعتبارسنجی خودداری کنید.
  • برای کارایی بهتر، از پارامتر number برای محدودکردن تعداد نتایج استفاده نمایید.
  • در صورتی که نیاز به کش‌کردن نتایج دارید، از wp_cache_set() و wp_cache_get() بهره ببرید.

مقایسه get_comments() با سایر توابع مشابه

تابعتوضیحکاربرد اصلی
get_comments()فقط داده‌ها را برمی‌گرداند، بدون چاپ مستقیم.استفاده در افزونه‌ها و قالب‌های سفارشی.
comments_template()قالب پیش‌فرض نظرات را نمایش می‌دهد.استفاده در فایل‌های single.php یا page.php.
wp_list_comments()نظرات را به‌صورت لیستی HTML چاپ می‌کند.استفاده برای ساختارهای از پیش تعیین‌شده HTML.

بهینه‌سازی عملکرد هنگام استفاده از get_comments()

در سایت‌های دارای حجم بالای داده، استفاده مکرر از این تابع می‌تواند منجر به افزایش بار پایگاه داده شود. برای جلوگیری از این مسئله:

  • از پارامتر cache_results استفاده کنید تا نتایج در حافظه کش وردپرس ذخیره شوند.
  • تعداد نتایج را محدود کنید ('number' => 20).
  • در صورت نیاز، فقط فیلدهای خاصی را بازیابی نمایید.

$args = array(
    'post_id'       => 120,
    'status'        => 'approve',
    'number'        => 20,
    'fields'        => 'ids', // فقط شناسه‌ها را بازگرداند
    'cache_results' => true,
);
$comment_ids = get_comments( $args );

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

جمع‌بندی

تابع get_comments() یکی از ابزارهای اصلی برای توسعه‌دهندگان وردپرس است که امکان دسترسی مستقیم و کنترل کامل بر داده‌های نظرات را فراهم می‌کند. با استفاده از پارامترهای متنوع، می‌توان خروجی‌های بسیار دقیق و هدفمند تولید کرد. با رعایت اصول امنیتی، فیلترگذاری هوشمند و بهینه‌سازی عملکرد، این تابع می‌تواند بخش کلیدی در طراحی قالب‌ها و افزونه‌های پیشرفته وردپرس باشد.

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

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