تابع comment_form در وردپرس
در سیستم مدیریت محتوای WordPress، تابع comment_form() نقش کلیدی در نمایش فرم نظردهی برای هر نوشته یا صفحه دارد. این تابع زمانی کاربرد دارد که بخواهید در قالب (theme) خود، بخشی برای ثبت کامنت کاربران اضافه کنید.
به بیان ساده، وقتی در فایل قالبتان (معمولاً فایل comments.php) قرار دهید:
<?php comment_form(); ?>فرم نظردهی پیشفرض وردپرس نمایش داده میشود.
این تابع به شما امکان میدهد که با استفاده از آرایهای از تنظیمات (پارامتر $args) ظاهر و رفتار فرم را سفارشی کنید.
پارامترها و ساختار تابع
تابع را میتوان به صورت زیر فراخوانی کرد:
comment_form( array $args = array(), int|WP_Post $post = null );که در آن:
$args: آرایهای از گزینهها برای سفارشیسازی فرم.$post: شناسه یا شیء نوشتهای که فرم برای آن نمایش داده میشود. اگر تهی باشد، فرم برای نوشتهٔ جاری نمایش داده میشود.
در آرایه $args گزینههای متعددی تعریف شدهاند. برخی از مهمترینها عبارتاند از:
fields: آرایهای از فیلدهای پیشفرض (مانند نام نویسنده، ایمیل، وبسایت) که قابل تغییر هستند.comment_field: فیلد متن نظر (textarea) که میتوانید HTML آن را عوض کنید.title_reply,title_reply_to: عناوین فرم هنگام ارسال نظر جدید یا پاسخ به نظر دیگر.label_submit: متن دکمهٔ ارسال نظر.
<licomment_notes_before و comment_notes_after: متونی که قبل یا بعد از فرم نمایش داده میشوند.
در نتیجه، با مقداردهی به این آرایه میتوان بخشهای مختلف فرم را کنترل و شخصیسازی کرد.
مثال ساده استفاده و توضیح
یک مثال ساده برای نمایش فرم در قالب:
<?php
comment_form();
?>در این حالت فرم با مقادیر پیشفرض نمایش داده میشود و همه فیلدها و تنظیمات استاندارد فعال هستند. این روش زمانی خوب است که بخواهید سریع فرم داشته باشید بدون تغییرات زیاد.
سفارشیسازی فرم نظردهی
گاهی نیاز است تا فرم مطابق نیاز طراحی شود؛ مثلاً حذف فیلد «وبسایت»، تغییر عنوان دکمه، یا افزودن HTML دلخواه.
در اینجا یک مثال برای حذف فیلد «وبسایت (URL)» و تغییر عنوان دکمه:
<?php
$comments_args = array(
'label_submit' => __('ارسال نظر', 'textdomain'),
'fields' => array(
'author' =>
'<p class="comment-form-author">' .
'<label for="author">' . __('نام', 'textdomain') . '</label> ' .
'*' .
'<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) .
'" size="30"' . $aria_req . ' /></p>',
'email' =>
'<p class="comment-form-email">' .
'<label for="email">' . __('ایمیل', 'textdomain') . '</label> ' .
'*' .
'<input id="email" name="email" type="text" value="' . esc_attr( $commenter['comment_author_email'] ) .
'" size="30"' . $aria_req . ' /></p>',
// حذف فیلد وبسایت:
'url' => ''
)
);
comment_form($comments_args);
?>توضیح:
در آرایهfields، فیلد «وبسایت» را برابر رشتهٔ خالی قرار دادیم تا حذف شود. (میتوانیم تنظیمات کاملتر هم بنویسیم) میشود.
متن دکمهٔ ارسال را با گزینه label_submit به «ارسال نظر» تغییر دادیم.
در این مثال فرض شده که متغیرهای $commenter و $aria_req پیشتر تنظیم شدهاند که معمولاً از تابع wp_get_current_commenter() استفاده میشود. اگر نداشته باشید، ممکن است خطا یا مقدار خالی ببینید، لذا لازم است کمی با شرایط آمادهسازی فرم آشنا باشید.
این مثال یک روش پایهای برای سفارشیسازی است. البته ممکن است نیاز به تغییرات بیشتر وجود داشته باشد.
بهبود/تعمیر احتمالی
اگر بخواهید فرم برای کاربران وارد شده (logged-in) متفاوت باشد یا استایل خاصی بگیرد، توصیه میشود از فیلترها (Filters) استفاده کنید تا قالب شما پایدار بماند. در واقع، ویرایش مستقیم در فایلهای قالب ممکن است در بهروزرسانیها بازنویسی شود. پس:
function my_remove_comment_url_field($fields) {
if ( isset($fields['url']) ) {
unset($fields['url']);
}
return $fields;
}
add_filter('comment_form_default_fields', 'my_remove_comment_url_field');در توضیح: این کد در فایل functions.php قالب یا در افزونهٔ مخصوص snippet قرار میگیرد و باعث میشود تا فیلد «وبسایت» از تمام فرمهای نظردهی حذف شود، بدون نیاز به هر بار آرایهسازی دستی در هر فرم. این روش پایدارتر و رعایت بهترین شیوههاست. :contentReference[oaicite:10]{index=10}
بهترین شیوهها در استفاده از comment_form()
برای اینکه فرم نظردهی شما هم از نظر کارکرد و هم از نظر تجربهٔ کاربری (UX) بهینه باشد، موارد زیر توصیه میشوند:
- همیشه چک کنید که بخش نظرات برای نوشته باز باشد — تابع comment_form درصورتی که امکان نظردهی بسته باشد، چیزی را چاپ نمیکند.
- استفاده از فیلترها بهجای ویرایش مستقیم HTML قالب — با این روش در بروزرسانی قالب یا وردپرس مشکلی نخواهید داشت.
- قالب مرتب و خوانا بنویسید — اگر استایل خاص میدهید، مطمئن شوید کلاسها و آیدیها با CSS و JavaScript شما هماهنگ باشند.
- سفارشیسازی منطقی و با توجه به کاربران — حذف فیلدها یا افزودن فیلد زیاد ممکن است فرم را سنگین یا گیجکننده کند. باید تجربهٔ کاربر را در نظر داشت.
- امنیت و اسپم کنترل — اگر فرم را دستکاری کردهاید (مثلاً فیلد جدید اضافه کردید)، از طریق افزونهها یا توابع وردپرس بررسی کنید که از ارسالهای ناخواسته یا اسپم محافظت شود.
کاربردها و مثالهای پیشرفتهتر
در ادامه چند کاربرد پیشرفتهتر برای شما آورده شده است:
- نمایش فرم برای نوشتهٔ خاص: اگر بخواهید فرم برای نوشتهای غیر از نوشتهٔ جاری هم نمایش داده شود، میتوانید شناسه نوشته را به پارامتر دوم ارسال کنید. مثال:
<?php comment_form( array(), 123 ); ?>که ۱۲۳ شناسهٔ نوشته موردنظر است. :contentReference[oaicite:14]{index=14}
- تغییر ترتیب فیلدها: بهصورت پیشفرض، وردپرس ممکن است اول «متن نظر» را نمایش دهد یا اول فیلدهای «نام» و «ایمیل». اگر بخواهید ترتیب را تغییر دهید میتوانید فیلدها را در آرایه
fieldsمرتب کنید. - افزودن پیام یا هشدار قبل یا بعد فرم: برای مثال نمایش «قوانین نظردهی» یا اعلان مرتبط. با پارامتر
comment_notes_beforeیاcomment_notes_afterقابل انجام است. - استایلدهی سفارشی: با افزودن کلاسها یا تغییر CSS فرم، میتوان ظاهر بهتری داشت. مثلاً هایلایت کردن فیلد فعال یا تغییر دکمه.
جدول مقایسهٔ امکانات پیشفرض و سفارشی
| قابلیت | حالت پیشفرض | سفارشیسازی ممکن |
|---|---|---|
| فیلد نام، ایمیل، وبسایت | نمایش داده میشوند | حذف، اضافه یا تغییر برچسب دارند |
| عنوان فرم | مثلاً «Leave a Reply» | تغییر با title_reply یا title_reply_to |
| دکمه ارسال | متن «Post Comment» | تغییر با label_submit |
| متن قبل/بعد فرم | مثلاً «Your email address will not be published.» | تغییر یا مخفیسازی با comment_notes_before/after |
| استایل و کلاسها | کلاسهای پیشفرض (مانند comment-form-author) | تغییر CSS یا اضافه کردن کلاس جدید |
جمعبندی میانجی برای توسعهدهندگان
تابع comment_form() ابزار بسیار انعطافپذیری است که در قالبهای وردپرس بخش مهمی از تجربه کاربری (نظردهی) را کنترل میکند. اگر قالب خود را توسعه میدهید، توصیه میشود:
- همواره این تابع را در فایل مناسب (معمولاً
comments.php) قرار دهید. - سفارشیسازی را از طریق آرایه
$argsیا فیلترها انجام دهید تا بروزرسانیها به مشکل نخورد. - توجه ویژه به تجربهٔ کاربر (UX)، استایل و کارکرد فرم داشته باشید تا کاربران منتقد نشوند.
- اگر فیلد جدید اضافه میکنید، حتماً بخش سرور (ثبت کامنت) را هم بررسی کنید تا مشکلی از لحاظ امنیت یا دادهها نداشته باشید.
- با استفادهٔ صحیح از این تابع، میتوانید فرم نظردهی سایتتان را با سلیقهٔ خودتان هماهنگ کرده و تجربهٔ کاربری بهتر و حرفهایتری ارائه دهید.
آیا این مطلب برای شما مفید بود ؟




