ویژگی تصویر

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

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

تابع get_comment_text() یکی از توابع کاربردی قالب‌نویسی در وردپرس است که متن نظر (comment) را به‌صورت رشته (string) بازمی‌گرداند. این تابع معمولاً در فایل‌های قالب مثل comments.php، درون Walkerها یا در هر جایی که بخواهید متن نظر را پردازش یا نمایش دهید استفاده می‌شود. در این مقاله به صورت عملی و با مثال‌های کاربردی، نحوهٔ صحیح استفاده، نکات امنیتی و بهینه‌سازی‌های ممکن را بررسی می‌کنیم.

تفاوت بین get_comment_text() و comment_text()

  • get_comment_text(): متن نظر را به‌صورت رشته برمی‌گرداند (return) و امکان پردازش بیشتر قبل از چاپ را فراهم می‌کند.
  • comment_text(): همان خروجی را مستقیماً چاپ (echo) می‌کند و برای نمایش ساده مناسب است.

در عمل اگر نیاز دارید متن را قبل از چاپ فیلتر، کوتاه یا پاک‌سازی کنید از get_comment_text() استفاده کنید؛ در غیر این صورت comment_text() سرعت بیشتری برای چاپ مستقیم دارد.

نمونهٔ سادهٔ استفاده

// داخل loop نظرات یا callback
echo get_comment_text();

این کد متن نظر جاری را نمایش می‌دهد. get_comment_text() خروجی‌ای که معمولاً شامل HTML مجاز و اعمال فیلترهای پیش‌فرض وردپرس است بازمی‌گرداند.

خروجی امن: پاک‌سازی و Escaping

به‌دلیل اینکه متن نظر ممکن است شامل HTML مجاز باشد، همیشه با توجه به زمینهٔ خروجی آن را escape یا فیلتر کنید:

$text = get_comment_text( get_comment_ID() ); // دریافت متن فرمت‌شده
echo wp_kses_post( $text ); // تنها تگ‌های مجاز پست را نگه می‌دارد

در این مثال از wp_kses_post برای نگه داشتن تگ‌های امن مانند <a> یا <strong> استفاده شده است. اگر قرار است متن داخل صفت HTML یا جاوااسکریپت قرار گیرد از esc_attr یا wp_json_encode استفاده کنید.

نمایش خلاصهٔ نظر (excerpt)

// گرفتن خلاصه 20 کلمه‌ای و چاپ به صورت متن ساده
$excerpt = wp_trim_words( wp_strip_all_tags( get_comment_text( get_comment_ID() ) ), 20, '...' );
echo esc_html( $excerpt );

در این کد ابتدا تمام تگ‌ها حذف شده، سپس با wp_trim_words متن به اندازهٔ مشخص کوتاه شده و در نهایت با esc_html ایمن چاپ می‌شود. این الگو برای صفحات فهرست یا نمایش نظرات در کارت‌ها مفید است.

استفاده در callback یا Walker سفارشی

در بسیاری از قالب‌ها نیاز دارید قالب دلخواهی برای هر نظر بسازید؛ get_comment_text() اجازه می‌دهد قبل از چاپ تغییرات انجام دهید:

function my_comment_callback( $comment, $args, $depth ) {
    $text = get_comment_text( $comment->comment_ID );
    // اضافه کردن برچسب در صورت ویرایش
    if ( $comment->comment_date_gmt !== $comment->comment_modified_gmt ) {
        $text .= '<p class="edited">(Edited)</p>';
    }
    echo wp_kses_post( $text );
}

در این مثال، بررسی می‌کنیم که آیا نظر ویرایش شده است یا نه و در صورت ویرایش یک پاراگراف اضافه می‌کنیم. سپس خروجی با wp_kses_post ایمن‌سازی و چاپ می‌شود.

کار با pingback و trackback

نوع نظر (comment_type) می‌تواند ‘comment’، ‘pingback’ یا ‘trackback’ باشد. گاهی لازم است آنها را متفاوت نمایش دهیم:

if ( 'pingback' === $comment->comment_type || 'trackback' === $comment->comment_type ) {
    echo '<em>Pingback:</em> ' . esc_html( get_comment_text() );
} else {
    echo get_comment_text();
}

برای pingback یا trackback معمولاً متن کوتاه‌تر و متفاوت نمایش داده می‌شود و ممکن است بخواهید HTML را حذف کنید.

فیلترها و سفارشی‌سازی خروجی

وردپرس روی متن نظر فیلترهایی اعمال می‌کند که امکان تغییر محتوای نمایش را می‌دهد. متداول‌ترین فیلترها از جمله comment_text هستند که می‌توانید از add_filter استفاده کنید:

// افزودن برچسب Edited برای نظرات ویرایش‌شده
add_filter( 'comment_text', 'my_comment_edited_label', 10, 2 );
function my_comment_edited_label( $text, $comment ) {
    if ( $comment->comment_date_gmt !== $comment->comment_modified_gmt ) {
        $text .= '<p class="edited">(Edited)</p>';
    }
    return $text;
}

با این فیلتر، هر زمان get_comment_text() یا comment_text() صدا زده شود، تغییر اعمال خواهد شد. توجه کنید پارامتر چهارم در add_filter برابر 2 است تا آبجکت $comment نیز به تابع فرستاده شود.

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

تابععملکرد اصلی
get_comment_text()بازگرداندن متن نظر برای پردازش یا چاپ دستی
comment_text()چاپ مستقیم متن نظر
get_comment()دریافت آبجکت نظر
wp_strip_all_tags() / wp_kses_post()کاهش یا ایمن‌سازی HTML خروجی

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

  • اگر در حلقهٔ طولانی نظرات از فیلترهای سنگین استفاده می‌کنید، به کشینگ خروجی فکر کنید تا بار پردازشی کاهش یابد.
  • برای نمایش در RSS یا JSON حتماً متن را مناسب‌سازی کنید (مثلاً حذف HTML یا encode مناسب).
  • در زمینه‌هایی که کاربر می‌تواند HTML درج کند، از wp_kses_post یا فهرستی از تگ‌های مجاز استفاده کنید تا XSS جلوگیری شود.
  • از strip_tags قبل از esc_attr استفاده کنید اگر قصد قرار دادن متن در attribute دارید.

جمع‌بندی

get_comment_text() ابزار ساده اما قدرتمندی برای کار با متن نظرات در وردپرس است. استفادهٔ صحیح از آن شامل درک تفاوت با comment_text، پاک‌سازی و escaping مناسب، و کاربرد در callbackها و فیلترها می‌شود. با رعایت نکات امنیتی و بهینه‌سازی می‌توانید خروجی نظرات را به شکل قابل‌اعتمادی در قالب و APIها نمایش دهید.

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

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