WordPress 4.0
[autoinstalls/wordpress.git] / wp-includes / comment-template.php
index 978221f980abb855c2c0061f49a647bedda686e0..0d44376b2a178a9142cab9a864bbb1a21dfe9123 100644 (file)
@@ -641,7 +641,7 @@ function get_comment_link( $comment = null, $args = array() ) {
  *
  * @since 1.5.0
  *
- * @param int|WP_Post $post_id Post ID or WP_Post object. Default current post.
+ * @param int|WP_Post $post_id Optional. Post ID or WP_Post object. Default is global $post.
  * @return string The link to the comments.
  */
 function get_comments_link( $post_id = 0 ) {
@@ -678,28 +678,26 @@ function comments_link( $deprecated = '', $deprecated_2 = '' ) {
  *
  * @since 1.5.0
  *
- * @param int|WP_Post $post_id Post ID or WP_Post object. Default current post.
+ * @param int|WP_Post $post_id Optional. Post ID or WP_Post object. Default is global $post.
  * @return int The number of comments a post has.
  */
 function get_comments_number( $post_id = 0 ) {
-       $post_id = absint( $post_id );
-
-       if ( !$post_id )
-               $post_id = get_the_ID();
+       $post = get_post( $post_id );
 
-       $post = get_post($post_id);
-       if ( ! isset($post->comment_count) )
+       if ( ! $post ) {
                $count = 0;
-       else
+       } else {
                $count = $post->comment_count;
+               $post_id = $post->ID;
+       }
 
        /**
         * Filter the returned comment count for a post.
         *
         * @since 1.5.0
         *
-        * @param int         $count   Nnumber of comments a post has.
-        * @param int|WP_Post $post_id Post ID or WP_Post object.
+        * @param int $count   Number of comments a post has.
+        * @param int $post_id Post ID.
         */
        return apply_filters( 'get_comments_number', $count, $post_id );
 }
@@ -715,18 +713,31 @@ function get_comments_number( $post_id = 0 ) {
  * @param string $deprecated Not used.
  */
 function comments_number( $zero = false, $one = false, $more = false, $deprecated = '' ) {
-       if ( !empty( $deprecated ) )
+       if ( ! empty( $deprecated ) ) {
                _deprecated_argument( __FUNCTION__, '1.3' );
+       }
+       echo get_comments_number_text( $zero, $one, $more );
+}
 
+/**
+ * Display the language string for the number of comments the current post has.
+ *
+ * @since 4.0.0
+ *
+ * @param string $zero Optional. Text for no comments. Default false.
+ * @param string $one  Optional. Text for one comment. Default false.
+ * @param string $more Optional. Text for more than one comment. Default false.
+ */
+function get_comments_number_text( $zero = false, $one = false, $more = false ) {
        $number = get_comments_number();
 
-       if ( $number > 1 )
-               $output = str_replace('%', number_format_i18n($number), ( false === $more ) ? __('% Comments') : $more);
-       elseif ( $number == 0 )
-               $output = ( false === $zero ) ? __('No Comments') : $zero;
-       else // must be one
-               $output = ( false === $one ) ? __('1 Comment') : $one;
-
+       if ( $number > 1 ) {
+               $output = str_replace( '%', number_format_i18n( $number ), ( false === $more ) ? __( '% Comments' ) : $more );
+       } elseif ( $number == 0 ) {
+               $output = ( false === $zero ) ? __( 'No Comments' ) : $zero;
+       } else { // must be one
+               $output = ( false === $one ) ? __( '1 Comment' ) : $one;
+       }
        /**
         * Filter the comments count for display.
         *
@@ -738,7 +749,7 @@ function comments_number( $zero = false, $one = false, $more = false, $deprecate
         *                       is equal to 0, 1, or 1+.
         * @param int    $number The number of post comments.
         */
-       echo apply_filters( 'comments_number', $output, $number );
+       return apply_filters( 'comments_number', $output, $number );
 }
 
 /**
@@ -1291,7 +1302,7 @@ function comments_popup_link( $zero = false, $one = false, $more = false, $css_c
  *                             Default current post.
  * @return mixed Link to show comment form, if successful. False, if comments are closed.
  */
-function get_comment_reply_link($args = array(), $comment = null, $post = null) {
+function get_comment_reply_link( $args = array(), $comment = null, $post = null ) {
 
        $defaults = array(
                'add_below'  => 'comment',
@@ -1303,28 +1314,31 @@ function get_comment_reply_link($args = array(), $comment = null, $post = null)
                'after'      => ''
        );
 
-       $args = wp_parse_args($args, $defaults);
+       $args = wp_parse_args( $args, $defaults );
 
-       if ( 0 == $args['depth'] || $args['max_depth'] <= $args['depth'] )
+       if ( 0 == $args['depth'] || $args['max_depth'] <= $args['depth'] ) {
                return;
+       }
 
-       extract($args, EXTR_SKIP);
+       $add_below = $args['add_below'];
+       $respond_id = $args['respond_id'];
+       $reply_text = $args['reply_text'];
 
-       $comment = get_comment($comment);
-       if ( empty($post) )
+       $comment = get_comment( $comment );
+       if ( empty( $post ) ) {
                $post = $comment->comment_post_ID;
-       $post = get_post($post);
+       }
+       $post = get_post( $post );
 
-       if ( !comments_open($post->ID) )
+       if ( ! comments_open( $post->ID ) ) {
                return false;
+       }
 
-       $link = '';
-
-       if ( get_option('comment_registration') && ! is_user_logged_in() )
-               $link = '<a rel="nofollow" class="comment-reply-login" href="' . esc_url( wp_login_url( get_permalink() ) ) . '">' . $login_text . '</a>';
-       else
+       if ( get_option( 'comment_registration' ) && ! is_user_logged_in() ) {
+               $link = '<a rel="nofollow" class="comment-reply-login" href="' . esc_url( wp_login_url( get_permalink() ) ) . '">' . $args['login_text'] . '</a>';
+       } else {
                $link = "<a class='comment-reply-link' href='" . esc_url( add_query_arg( 'replytocom', $comment->comment_ID ) ) . "#" . $respond_id . "' onclick='return addComment.moveForm(\"$add_below-$comment->comment_ID\", \"$comment->comment_ID\", \"$respond_id\", \"$post->ID\")'>$reply_text</a>";
-
+       }
        /**
         * Filter the comment reply link.
         *
@@ -1335,7 +1349,7 @@ function get_comment_reply_link($args = array(), $comment = null, $post = null)
         * @param object  $comment The object of the comment being replied.
         * @param WP_Post $post    The WP_Post object.
         */
-       return apply_filters( 'comment_reply_link', $before . $link . $after, $args, $comment, $post );
+       return apply_filters( 'comment_reply_link', $args['before'] . $link . $args['after'], $args, $comment, $post );
 }
 
 /**
@@ -1389,18 +1403,21 @@ function get_post_reply_link($args = array(), $post = null) {
        );
 
        $args = wp_parse_args($args, $defaults);
-       extract($args, EXTR_SKIP);
+       $add_below = $args['add_below'];
+       $respond_id = $args['respond_id'];
+       $reply_text = $args['reply_text'];
        $post = get_post($post);
 
-       if ( !comments_open($post->ID) )
+       if ( ! comments_open( $post->ID ) ) {
                return false;
+       }
 
-       if ( get_option('comment_registration') && ! is_user_logged_in() )
-               $link = '<a rel="nofollow" href="' . wp_login_url( get_permalink() ) . '">' . $login_text . '</a>';
-       else
+       if ( get_option('comment_registration') && ! is_user_logged_in() ) {
+               $link = '<a rel="nofollow" href="' . wp_login_url( get_permalink() ) . '">' . $args['login_text'] . '</a>';
+       } else {
                $link = "<a rel='nofollow' class='comment-reply-link' href='" . get_permalink($post->ID) . "#$respond_id' onclick='return addComment.moveForm(\"$add_below-$post->ID\", \"0\", \"$respond_id\", \"$post->ID\")'>$reply_text</a>";
-
-       $formatted_link = $before . $link . $after;
+       }
+       $formatted_link = $args['before'] . $link . $args['after'];
        /**
         * Filter the formatted post comments link HTML.
         *
@@ -1552,7 +1569,7 @@ class Walker_Comment extends Walker {
         * @since 2.7.0
         * @var string
         */
-       var $tree_type = 'comment';
+       public $tree_type = 'comment';
 
        /**
         * DB fields to use.
@@ -1562,7 +1579,7 @@ class Walker_Comment extends Walker {
         * @since 2.7.0
         * @var array
         */
-       var $db_fields = array ('parent' => 'comment_parent', 'id' => 'comment_ID');
+       public $db_fields = array ('parent' => 'comment_parent', 'id' => 'comment_ID');
 
        /**
         * Start the list before the elements are added.
@@ -1575,7 +1592,7 @@ class Walker_Comment extends Walker {
         * @param int $depth Depth of comment.
         * @param array $args Uses 'style' argument for type of HTML list.
         */
-       function start_lvl( &$output, $depth = 0, $args = array() ) {
+       public function start_lvl( &$output, $depth = 0, $args = array() ) {
                $GLOBALS['comment_depth'] = $depth + 1;
 
                switch ( $args['style'] ) {
@@ -1584,8 +1601,8 @@ class Walker_Comment extends Walker {
                        case 'ol':
                                $output .= '<ol class="children">' . "\n";
                                break;
-                       default:
                        case 'ul':
+                       default:
                                $output .= '<ul class="children">' . "\n";
                                break;
                }
@@ -1602,7 +1619,7 @@ class Walker_Comment extends Walker {
         * @param int    $depth  Depth of comment.
         * @param array  $args   Will only append content if style argument value is 'ol' or 'ul'.
         */
-       function end_lvl( &$output, $depth = 0, $args = array() ) {
+       public function end_lvl( &$output, $depth = 0, $args = array() ) {
                $GLOBALS['comment_depth'] = $depth + 1;
 
                switch ( $args['style'] ) {
@@ -1611,8 +1628,8 @@ class Walker_Comment extends Walker {
                        case 'ol':
                                $output .= "</ol><!-- .children -->\n";
                                break;
-                       default:
                        case 'ul':
+                       default:
                                $output .= "</ul><!-- .children -->\n";
                                break;
                }
@@ -1650,7 +1667,7 @@ class Walker_Comment extends Walker {
         * @param string $output            Passed by reference. Used to append additional content.
         * @return null Null on failure with no changes to parameters.
         */
-       function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) {
+       public function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) {
 
                if ( !$element )
                        return;
@@ -1684,7 +1701,7 @@ class Walker_Comment extends Walker {
         * @param int    $depth   Depth of comment in reference to parents.
         * @param array  $args    An array of arguments.
         */
-       function start_el( &$output, $comment, $depth = 0, $args = array(), $id = 0 ) {
+       public function start_el( &$output, $comment, $depth = 0, $args = array(), $id = 0 ) {
                $depth++;
                $GLOBALS['comment_depth'] = $depth;
                $GLOBALS['comment'] = $comment;
@@ -1724,7 +1741,7 @@ class Walker_Comment extends Walker {
         * @param int    $depth   Depth of comment.
         * @param array  $args    An array of arguments.
         */
-       function end_el( &$output, $comment, $depth = 0, $args = array() ) {
+       public function end_el( &$output, $comment, $depth = 0, $args = array() ) {
                if ( !empty( $args['end-callback'] ) ) {
                        ob_start();
                        call_user_func( $args['end-callback'], $comment, $args, $depth );
@@ -1780,7 +1797,7 @@ class Walker_Comment extends Walker {
                        $add_below = 'div-comment';
                }
 ?>
-               <<?php echo $tag; ?> <?php comment_class( empty( $args['has_children'] ) ? '' : 'parent' ); ?> id="comment-<?php comment_ID(); ?>">
+               <<?php echo $tag; ?> <?php comment_class( $this->has_children ? 'parent' : '' ); ?> id="comment-<?php comment_ID(); ?>">
                <?php if ( 'div' != $args['style'] ) : ?>
                <div id="div-comment-<?php comment_ID(); ?>" class="comment-body">
                <?php endif; ?>
@@ -1826,7 +1843,7 @@ class Walker_Comment extends Walker {
        protected function html5_comment( $comment, $depth, $args ) {
                $tag = ( 'div' === $args['style'] ) ? 'div' : 'li';
 ?>
-               <<?php echo $tag; ?> id="comment-<?php comment_ID(); ?>" <?php comment_class( empty( $args['has_children'] ) ? '' : 'parent' ); ?>>
+               <<?php echo $tag; ?> id="comment-<?php comment_ID(); ?>" <?php comment_class( $this->has_children ? 'parent' : '' ); ?>>
                        <article id="div-comment-<?php comment_ID(); ?>" class="comment-body">
                                <footer class="comment-meta">
                                        <div class="comment-author vcard">
@@ -1872,7 +1889,7 @@ class Walker_Comment extends Walker {
  * @param string|array $args {
  *     Optional. Formatting options.
  *
- *     @type string $walker            The Walker class used to list comments. Default null.
+ *     @type object $walker            Instance of a Walker class to list comments. Default null.
  *     @type int    $max_depth         The maximum comments depth. Default empty.
  *     @type string $style             The style of list ordering. Default 'ul'. Accepts 'ul', 'ol'.
  *     @type string $callback          Callback function to use. Default null.
@@ -1918,6 +1935,17 @@ function wp_list_comments( $args = array(), $comments = null ) {
 
        $r = wp_parse_args( $args, $defaults );
 
+       /**
+        * Filter the arguments used in retrieving the comment list.
+        *
+        * @since 4.0.0
+        *
+        * @see wp_list_comments()
+        *
+        * @param array $r An array of arguments for displaying comments.
+        */
+       $r = apply_filters( 'wp_list_comments_args', $r );
+
        // Figure out what comments we'll be looping through ($_comments)
        if ( null !== $comments ) {
                $comments = (array) $comments;
@@ -1977,20 +2005,22 @@ function wp_list_comments( $args = array(), $comments = null ) {
        if ( null === $r['reverse_top_level'] )
                $r['reverse_top_level'] = ( 'desc' == get_option('comment_order') );
 
-       extract( $r, EXTR_SKIP );
-
-       if ( empty($walker) )
+       if ( empty( $r['walker'] ) ) {
                $walker = new Walker_Comment;
+       } else {
+               $walker = $r['walker'];
+       }
 
-       $output = $walker->paged_walk($_comments, $max_depth, $page, $per_page, $r);
+       $output = $walker->paged_walk( $_comments, $r['max_depth'], $r['page'], $r['per_page'], $r );
        $wp_query->max_num_comment_pages = $walker->max_pages;
 
        $in_comment_loop = false;
 
-       if ( $r['echo'] )
+       if ( $r['echo'] ) {
                echo $output;
-       else
+       } else {
                return $output;
+       }
 }
 
 /**
@@ -2024,6 +2054,7 @@ function wp_list_comments( $args = array(), $comments = null ) {
  *                                        Default 'You may use these HTML tags and attributes ...'.
  *     @type string $id_form              The comment form element id attribute. Default 'commentform'.
  *     @type string $id_submit            The comment submit element id attribute. Default 'submit'.
+ *     @type string $name_submit          The comment submit element name attribute. Default 'submit'.
  *     @type string $title_reply          The translatable 'reply' button label. Default 'Leave a Reply'.
  *     @type string $title_reply_to       The translatable 'reply-to' button label. Default 'Leave a Reply to %s',
  *                                        where %s is the author of the comment being replied to.
@@ -2036,8 +2067,6 @@ function wp_list_comments( $args = array(), $comments = null ) {
 function comment_form( $args = array(), $post_id = null ) {
        if ( null === $post_id )
                $post_id = get_the_ID();
-       else
-               $id = $post_id;
 
        $commenter = wp_get_current_commenter();
        $user = wp_get_current_user();
@@ -2080,6 +2109,7 @@ function comment_form( $args = array(), $post_id = null ) {
                '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',
+               'name_submit'          => 'submit',
                'title_reply'          => __( 'Leave a Reply' ),
                'title_reply_to'       => __( 'Leave a Reply to %s' ),
                'cancel_reply_link'    => __( 'Cancel reply' ),
@@ -2200,7 +2230,7 @@ function comment_form( $args = array(), $post_id = null ) {
                                                ?>
                                                <?php echo $args['comment_notes_after']; ?>
                                                <p class="form-submit">
-                                                       <input name="submit" type="submit" id="<?php echo esc_attr( $args['id_submit'] ); ?>" value="<?php echo esc_attr( $args['label_submit'] ); ?>" />
+                                                       <input name="<?php echo esc_attr( $args['name_submit'] ); ?>" type="submit" id="<?php echo esc_attr( $args['id_submit'] ); ?>" value="<?php echo esc_attr( $args['label_submit'] ); ?>" />
                                                        <?php comment_id_fields( $post_id ); ?>
                                                </p>
                                                <?php