Comments教程


Updated on: September 19, 2020 in Wordpress by

WordPress的comment form是以comments.php文件作为基础的,没有这个文件无法调取comment函数。

首先在目录下创建comments.php文件,然后在single.php里comment的位置上,用函数调取comments form的内容:

if (comments_open(  ) || get_comments_number(  ) ) {
                comments_template();  // 调取 comments.php 
              }

comments_open( )来检查是否帖子开启了comments功能,每个帖子都可以在帖子编辑页面文档=》讨论区里设置是否单独启用comment.

接下来我们编辑comments.php的模板,首先在头部添加一段代码,来检测是否帖子设置了密码保护,如果是,就不显示comments的内容:

<?php if (post_password_required(  )) {
  return;
} ?>

通过comment_form() 函数来调用评论时候的表格,wordpress也设置好了一切检验表格的机制,comment_form用法:

comment_form( <em>array</em> $args = array(), <em>int|WP_Post</em> $post_id = null )

函数最主要有几个数组组成:‘comment_field’‘must_log_in’‘logged_in_as’

‘title_reply’‘title_reply_to’‘label_submit’‘submit_button’‘submit_field’,‘field’等组成,field又由下级数组组成:‘author’’email’‘url’‘cookies’等。comment_form里可以直接粘贴html,完整用法举例:

comment_form(
          array(
                      //comment body
                      'comment_field'  => '<div class="clear"></div>

                    <div class="col_full">
                      <label>Comment</label>
                      <textarea name="comment" cols="58" rows="7" class="sm-form-control"></textarea>
                    </div>',
                    //all the fields availbel inthe comments form
                    
                    'fields'  => array(
                      'author'  => '<div class="col_one_third">
                      <label>Name</label>
                      <input type="text" name="author" class="sm-form-control" />
                    </div>',
                      'email'  => '<div class="col_one_third">
                      <label>Email</label>
                      <input type="text" name="email" class="sm-form-control" />
                    </div>',
                      'url'  => '<div class="col_one_third col_last">
                      <label>Website</label>
                      <input type="text" name="url" class="sm-form-control" />
                    </div>',


                    ),
                    'class_submit'  => 'button button-3d nomargin',  //submit button class
                    'label_submit'  => __( 'Submit Comment', 'udemy' ),
                    'title_reply'  => __( 'Leave a <span>Comment</span>', 'udemy' ),


                    )

                  );

WordPress把所有comments存储在$comments的变量中,要把他们全部都展现出来,可以通过foreach来遍历,循环和标签的用法如下:

<?php if (have_comments()): ?>
                  <h3 id="comments-title"><span><?php comments_number(); ?></span></h3>

                <!-- Comments List
                                ============================================= -->
                <ol class="commentlist clearfix">

                  <?php foreach ($comments as $comment ): ?>
                  <li class="comment even thread-even depth-1" id="li-comment-1">

                    <div id="comment-1" class="comment-wrap clearfix">

                      <div class="comment-meta">

                        <div class="comment-author vcard">

                          <span class="comment-avatar clearfix">
                           <?php echo get_avatar( $comment, 60, '', '', array('class'  => 'avatar avatar-60 photo avatar-default') ); ?>
                          </span>

                        </div>

                      </div>

                      <div class="comment-content clearfix">

                        <div class="comment-author">
                          <?php comment_author(  ); ?>
                          <span><?php comment_date() ?></span>
                        </div>

                        <?php comment_text(); ?>

                      </div>

                      <div class="clear"></div>

                    </div>

                  </li>
                  <?php endforeach; the_comments_pagination(  ); ?>

                </ol><!-- .commentlist end -->
                <?php endif ?>

同时要注意if条件的使用,设置如果没有开启comment或者comments数量为0时不展现comment form模板。

Comment的reply功能,我们会在下一篇教程中讲到。