تعداد بازدید: 6785

WP Comment

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

WP_Comments

وردپرس بر پایه معماری MVC و دارای مدل محتوایی WP_Comment می باشد. این مدل یک کلاس با dynamic attribute متناظر با ویژگی های comment در جدول وردپرس است

این مدل یک رابطه یک به چند (n-1) با مدل محتوایی کاربر یا همان WP_User دارد و یک رابطه یک به چند (1-n) با مدل محتوایی WP_Post دارد.

پس با توجه به قوانین پیاده سازی شده در Objective Relational Mapping در وردپرس می توان گفت هر کاربر می تواند چند دیدگاه و هر پست می تواند چند دیدگاه و هر دیدگاه متعلق به یک پست و یک کاربر به خصوص است.

دیدگاه ها تنها برای پست ها قابل پیاده سازی می باشند . چون تنها رابطه میان پست و کاربر و دیدگاه وجود دارد.(WP_Post , WP_Comment , WP_User)

جداول پایگاه داده Comments دو جدول زیر می باشند :

  • wp_comments : این جدول که به وسیله کلید comment_post_id به پست ها متصل و به وسیله user_id به کاربر متصل می باشد.این جدول شامل اطلاعاتی در رابطه با کاربر دیدگاه گذارنده می باشد. چرا که کاربران میهمان که دیدگاه می گذارند باید اطلاعاتی از آن ها ثبت گردد.
  • wp_commentmeta : اطلاعات متای دیدگاه ها که هم به صورت پیش فرض اطلاعاتی نرم افزار وردپرس دارد و هم می تواند توسط ما پیاده سازی گردد.

دو تابع اصلی در رابطه با دیدگاه ها در وردپرس wp_list_comments و comment_form می باشند که یکی جهت پیاده سازی دیدگاه ها و دیگری فرم دیدگاه را پیاده سازی می کند.هر کدام از این توابع نیز آرگومان هایی دارند که می توان به وسیله آن ها دیدگاه ها و فرم دیدگاه را شخصی سازی کرد.

پیاده سازی فرم دیدگاه – Comment Fom

برای پیاده سازی فرم دیدگاه از تابع comment_form استفاده می کنیم که در مسیر wp-includes/comment-template.php قرار گرفته است.

<?php comment_form( $args, $post_id ); ?>

این تابع دو پارامتر می گیرد :

  • args : آرگومان هایی که مربوط به نحوه پیاده سازی فرم این تابع می باشد.
  • post_id : شناسه پست که با این فرم قرار است برای آن دیدگاه ثبت گردد.

لیست آرگومان های پارامتر args :

fields : این مقدار آرایه ای از فیلد های اضافه بر ناحیه متنی دیدگاه در فرم می باشد. به صورت پیش فرض author , email , url در این فیلد وجود دارد که با overwirte شدن آن توسط شما این مقادیر تغییر می کند.

$args = array(
   'fields' =>  array(
         'author'  => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' . '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30" maxlength="245"' . $html_req . ' /></p>',
         'email'   => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' .  '<input id="email" name="email" ' . ( $html5 ? 'type="email"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30" maxlength="100" aria-describedby="email-notes"' . $html_req . ' /></p>',
    )     'url'     => '<p class="comment-form-url"><label for="url">' . __( 'Website' ) . '</label> ' . '<input id="url" name="url" ' . ( $html5 ? 'type="url"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30" maxlength="200" /></p>',
);

comment_field : این مقدار همان ساختار ناحیه متنی دیدگاه است. دقت داشته باشید که نام آن ها را اگر از حالت پیش فرض استفاده نکنید باید برای ذخیره سازی آن ها فکری داشته باشید. همچنین ID و Class های لازمه را در آن پیاده سازی کنید.

$args = array(
  'comment_field' => '<p class="comment-form-comment"><label for="comment">' . _x( 'Comment', 'noun' ) . '</label><textarea id="comment" name="comment" cols="45" rows="8" aria-required="true"></textarea></p>'
);

سایر پارامتر های این تابع شامل متون پاسخ و لغو پاسخ و نمایش دیدگاه به ازای کاربران لاگین و غیر لاگین و … می باشد.

Comment Meta Actions

شما می توانید فیلد های اضافی خود را به آرایه بالا اضافه کنید (مثلا شهر).

$commenter = wp_get_current_commenter();
$default[ 'fields' ][ 'email' ] .= '<p class="comment-form-author"><label for="city">'. __('City') . '</label><span class="required">*</span><input id="city" name="city" size="30" type="text" /></p>';

این همان مقدار fields از پارامتر args است که به تابع comment_form دادیم . به این شکل مقدار city را نیز به لیست فیلد های آن اضافه کردیم. این کار با فیلتر comment_form_defaults نیز قابل انجام است.

دقت داشته باشید که در زمان ذخیره دیدگاه با استفاده از فیلتر comment_post آن را با استفاده از توابع meta comment ذخیره کنید.

add_action( 'comment_post', 'save_comment_meta_data' );
function save_comment_meta_data( $comment_id ) {
    add_comment_meta( $comment_id, 'city', $_POST[ 'city' ] );
}

توابعی که عملیات CRUD روی اطلاعات متای دیدگاه (meta comment) انجام می دهد :

همچنین با استفاده از فیلتر preprocess_comment می توانید آن را اعتبار سنجی کنید :

add_filter( 'preprocess_comment', 'verify_comment_meta_data' );
function verify_comment_meta_data( $commentdata ) {
    if ( ! isset( $_POST['city'] ) )
        wp_die( __( 'Error: please fill the required field (city).' ) );
    return $commentdata;
}

در نهایت باید با استفاده از قلاب های add_meta_boxes_comment و edit_comment اطلاعات متا را در پنل ادمین ذخیره و بروزرسانی کنید.

در سمت فرانت وب سایت هم می توانید با استفاده از توابع meta comment این کار را انجام دهید.

WP_Comment_Query

همانند مدل محتوایی WP_Post متناظرا به ازای WP_Comment نیز جهت دریافت collection دیدگاه ها امکانات زیر را در اختیار داریم :

پارامتر های get_comments و کلاس WP_Comment_Query یکی است و حدودا رفتار مشابه به get_posts و WP_Query دارند.

برای دریافت دیدگاه ها می توانید یک شئ از کلاس WP_Comment_Query بگیرید و پس از دریافت اشیا دیدگاه ها آن را در یک حلقه قرار داده و با توجه به خروجی خود چاپ کنید.

شئ ایجاد شده از روی این کلاس method , property قابل استفاده ای ندارد. تنها پارامتر های آن که در زمان ساخت شئ باید در قالب آرایه به آن بدهیم مهم می باشد.

برخی از این پارامتر ها را بررسی می کنیم :

  • post_id : دیدگاه های مربوط به این پست
  • status : وضعیت دیدگاه که معمولا دیدگاه های تایید شده (approve) را می گیریم.
  • parent : در پیاده سازی دیدگاه های تو در تو استفاده می شود. مثلا دیدگاه هایی که در پاسخ به دیدگاه خاص داده شده است. اگر دیدگاه های مادر را فقط بخواهیم مقدار 0 به آن می دهیم.
  • number : این معادل posts_per_page در WP_Query می باشد.
$args = array(
   // args here
);

// The Query
$comments_query = new WP_Comment_Query;
$comments = $comments_query->query( $args );

// Comment Loop
if ( $comments ) {
	foreach ( $comments as $comment ) {
		echo '<p>' . $comment->comment_content . '</p>';
	}
} else {
	echo 'No comments found.';
}

پس برای اضافه کردن فیلد جدید به فرم پیش فرض وردپرس نیاز به اضافه کردن آن فیلد به فرم دیدگاه و لیست دیدگاه در پنل ادمین و لیست دیدگاه ها و ذخیره سازی آن در پایگاه داده می باشد.

نکته : در پایان وقتی دیدگاه های خود را گرفتید می توانید آن را به عنوان پارامتر دوم (پارامتر اول مربوط به نوع خروجی دیدگاه ها است) تابع wp_list_comments بدهید و لیست دیدگاه ها را نمایش بگذارید. راه دیگر هم این است که خودتان خروجی را بسازید که در این روش باید به نحوه پیاده سازی ID و Class ها دقت داشته باشید.

نکاتی پیرامون استفاده از دیدگاه وردپرس

وردپرس همانند بسیاری از فریم ورک ها امکانات زیادی نظیر Authentication (سیستم احراز هویت) Authorization (سیستم تعیین سطح کاربری) و پیاده سازی تنظیمات  (Settings API) و سیستم دیدگاه گذاری (WP Comment System) دارد که در حین استفاده از از امکانات هر کدام آگاه باشید.

نکته : وردپرس یک قالب پیش فرض برای دیدگاه ها در نظر گرفته است. فایل comments.php لیست دیدگاه ها را می تواند در خود بگیرد و برای فراخوانی این قالب می توانید از تابع comments_template استفاده کنید:

// If comments are open or we have at least one comment, load up the comment template.
 if ( comments_open() || get_comments_number() ) :
     comments_template();
 endif;

به طور کل در وردپرس یک سری قالب پیش فرض با توجه به معماری وردپرس داریم که شئ یا اشیا جاری خود را دارند و یا ما می توانیم قالب خود را داشته باشیم و شئ را در قالب جاری کنیم.

برای توضیح بیشتر معماری قالب وردپرس و فراخوانی قالب فایل در وردپرس را مطالعه کنید.

نکته :‌ وردپرس برای پیاده سازی پاسخ به دیدگاه یا همان comment-reply اسکریپتی دارد که با اضافه کردن آن به پوسته می توانید پاسخ به دیدگاه ها را به صورت جاوا اسکریپتی پیاده سازی کنید :

/**
 * add comment reply scripts before show comment form
 */
function rng_enqueue_comment_reply_script() {
    if ( get_option( 'thread_comments' ) ) {
        wp_enqueue_script( 'comment-reply' );
    }
}
add_action( 'comment_form_before', 'rng_enqueue_comment_reply_script' );

زمانی که دیدگاه ها را به صورت custom query پیاده سازی می کنید باید پارامتر add_below را به آن بدهید تا لینک ایجاد شده طوری باشد که بتواند از قابلیت گفته شده استفاده کند.

به ID و Class هایی که به فیلد ها داده شده دقت داشته باشید ، بسیاری از این موارد در ساختار های جاوااسکریپتی استفاده می شوند. مثلا برای پیاده سازی امکان گفته شده باید دیدگاه شناسه comment داشته باشد و کل فرم در شناسه respond پیچیده شده باشد.

 

مطالب مشابه

آموزش نکات و تکنیک های برنامه نویسی وردپرس

WP_Query در وردپرس

مدل محتوای (Model) وردپرس پست است ، یعنی محتواها در قالب های مختلف پست هایی با ویژگی های مختلف می باشند. کلاس WP_Query...

آموزش نکات و تکنیک های برنامه نویسی وردپرس

معرفی تابع get_posts در وردپرس

در این مقاله میخوایم که تابع get_post و get_posts رو معرفی کنیم . این تابع کار کوئری هایی که با شی WP_Query می گرفتیم ....

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای WP Comment

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *