wordpress3.0 自定义评论表单

wordpress3.0 自定义评论表单

 很多WordPress新手朋友在使用WordPress建站时,经常会碰到自定义评论表单的问题,因为默认的WordPress提供的评论表单区域的内容比较简陋,在模板中显示的很不像话,使得页面美观大打折扣。那么本文就介绍如何使用WordPress中的新功能来自定义评论表单。

我们要使用的函数就是comment_form(),comment_form()是wordpress3.0出现的新的实用方法,作用是快速生成评论表单。comment_form大大简化了评论表单构建过程,从此以后你无须书写一堆html代码产生评论表格,只要一行:

<?php comment_form(); ?>

就搞定问题了!明河借用个广告词“so easy!” -_-!

 

comment_form()未出现前

 

你可以打开你主题的comments.php ,你会看到类似如下的表单代码:

 

<?php if ( comments_open() ) : ?>

 

<div id="respond">

    <div class="single-box mar-t-10">

         <div class="single-box-header clearfix"><span></span>有话要说?请在此留下阁下高见</div>

    </div>

 

    <div id="cancel-comment-reply">

        <small><?php cancel_comment_reply_link() ?></small>

    </div>

 

<?php if ( get_option('comment_registration') && !is_user_logged_in() ) : ?>

<p><?php printf(__('请先<a href="%s">登录</a>,然后再发表评论', 'kubrick'),wp_login_url( get_permalink() )); ?></p>

<?php else : ?>

 

<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">

<table width="100%" border="0" cellspacing="0" cellpadding="0" class="comment-table mar-t-10">

<?php if ( is_user_logged_in() ) : ?>

 

<p class="mar-t-b-10"><?php printf(__('你的用户名是<a href="%1$s">%2$s</a>','kubrick'), get_option('siteurl') . '/wp-admin/profile.php', $user_identity); ?>,<a href="<?php echo wp_logout_url(get_permalink()); ?>" title="<?php _e('Log out of this account', 'kubrick'); ?>"><?php _e('注销;', 'kubrick'); ?></a></p>

 

<?php else : ?>

  <tr>

    <td><label for="author"><?php _e('用户名', 'kubrick'); ?> <?php if ($req)_e("(必须)", "kubrick"); ?></label></td>

    <td><label for="email"><?php _e('邮箱 (不会公开', 'kubrick'); ?> <?php if($req) _e(",必须)", "kubrick"); ?></label></td>

    <td><label for="url"><?php _e('站点URL', 'kubrick'); ?></label></td>

  </tr>

  <tr>

    <td><input type="text" name="author" id="author" value="<?php echoesc_attr($comment_author); ?>" size="25" tabindex="1" <?php if ($req) echo "aria-required='true'"; ?> class="comment-input" /></td>

    <td><input type="text" name="email" id="email" value="<?php echoesc_attr($comment_author_email); ?>" size="25" tabindex="2" <?php if ($req) echo"aria-required='true'"; ?> class="comment-input" /></td>

    <td><input type="text" name="url" id="url" value="<?php echo esc_attr($comment_author_url); ?>" size="25" tabindex="3" class="comment-input" />

</td>

  </tr>

<?php endif; ?>

  <tr>

    <td colspan="3">你的评论</td>

  </tr>

  <tr>

     <td colspan="3"><textarea name="comment" id="comment" cols="58" rows="10" tabindex="4" class="comment-input" ></textarea></td>

  </tr>

  <tr>

    <td><input name="submit" type="submit" id="submit" class="comment-submit" tabindex="5" value="<?php _e('提交评论', 'kubrick'); ?>" /><?phpcomment_id_fields(); ?></td>

    <td>&nbsp;</td>

    <td></td>

  </tr>

</table>

<?php do_action('comment_form', $post->ID); ?>

 

</form>

 

<?php endif; // If registration required and not logged in ?>

以上代码来自明河自制的RIA之家主题,大部分的评论的表单都与之类似,是不是觉得有些头晕?

 

comment_form()出现之后

 

<?php comment_form(); ?>

一行搞定!这里明河说明下,wordpress3.0的默认模板依旧采用旧的表单生成形式,而wordpress3.0新加入的twentyten已经使用comment_form()来生成评论表单了。

实际上还需要做一些处理,比如评论中按钮和lable是英文,设置中文,还需要comment_form的参数帮忙

 

comment_form()参数说明

 

comment_form()有二个参数

 

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

$args:comment_form()的输出配置参数,为一个关联数组,配置项非常丰富,将再下一步说明。

$post_id:文章id,默认为空,即当前id

comment_form()的$args参数详解

 

$args的默认配置项如下:

 

$defaults = array(

        'fields'               => apply_filters( 'comment_form_default_fields',$fields ),

        '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>',

        'must_log_in'          => '<p class="must-log-in">' .  sprintf( __( 'You must be <a href="%s">logged in</a> to post a comment.' ), wp_login_url(apply_filters( 'the_permalink', get_permalink( $post_id ) ) ) ) . '</p>',

        'logged_in_as'         => '<p class="logged-in-as">' . sprintf( __('Logged in as <a href="%1$s">%2$s</a>. <a href="%3$s" title="Log out of this account">Log out?</a>' ), admin_url( 'profile.php' ), $user_identity,wp_logout_url( apply_filters( 'the_permalink', get_permalink( $post_id ) ) ) ) .'</p>',

        'comment_notes_before' => '<p class="comment-notes">' . __( 'Your email address will not be published.' ) . ( $req ? $required_text : '' ) . '</p>',

        'comment_notes_after'  => '<p class="form-allowed-tags">' . sprintf( __('You may use these <abbr title="HyperText Markup Language">HTML</abbr> tags and attributes: %s' ), ' <code>' . allowed_tags() . '</code>' ) . '</p>',

        'id_form'              => 'commentform',

        'id_submit'            => 'submit',

        'title_reply'          => __( 'Leave a Reply' ),

        'title_reply_to'       => __( 'Leave a Reply to %s' ),

        'cancel_reply_link'    => __( 'Cancel reply' ),

        'label_submit'         => __( 'Post Comment' ),

    );

配置项很多,明河以评论表单中的英文改中文为例:

 

$comment_form_args = array('must_log_in'          => '<p class="must-log-in">' . sprintf( __( '你必须先 <a href="%s">登录</a>才能发表评论。' ), wp_login_url(apply_filters( 'the_permalink', get_permalink( $post_id ) ) ) ) . '</p>',

                           'logged_in_as'         => '<p class="logged-in-as">' .sprintf( __( '<a href="%1$s">%2$s</a>已经登录,要 <a href="%3$s" title="注销用户">注销</a>此用户吗?' ), admin_url( 'profile.php' ), $user_identity, wp_logout_url(apply_filters( 'the_permalink', get_permalink( $post_id ) ) ) ) . '</p>',

                           'comment_notes_before' => '<p class="comment-notes">'. __( '你的email不会被公开。' ) . ( $req ? $required_text : '' ) . '</p>',

                           'comment_notes_after'  => '<p class="form-allowed-tags">' . sprintf( __( '你只能使用以下 <abbr title="HyperText Markup Language">HTML</abbr> 标签和属性: %s' ), ' <code>' . allowed_tags() . '</code>' ) .'</p>',

                           'title_reply'          => __( '留下一个回复' ),

                           'title_reply_to'       => __( '给%s的回复' ),

                           'cancel_reply_link'    => __( '取消回复' ),

                           'label_submit'         => __( '提交评论' ));

comment_form($comment_form_args);