WordPress.org

Make WordPress Core

Ticket #38514: comment_form-early_exit.diff

File comment_form-early_exit.diff, 13.0 KB (added by jipmoors, 5 years ago)
  • src/wp-includes/comment-template.php

    diff --git src/wp-includes/comment-template.php src/wp-includes/comment-template.php
    index dc63e36..75af97b 100644
    function comment_form( $args = array(), $post_id = null ) { 
    21672167        if ( null === $post_id )
    21682168                $post_id = get_the_ID();
    21692169
     2170        // Exit the function when comments are closed for the object.
     2171        if ( ! comments_open( $post_id ) ) {
     2172                /**
     2173                 * Fires after the comment form if comments are closed.
     2174                 *
     2175                 * @since 3.0.0
     2176                 */
     2177                do_action( 'comment_form_comments_closed' );
     2178
     2179                return;
     2180        }
     2181
    21702182        $commenter = wp_get_current_commenter();
    21712183        $user = wp_get_current_user();
    21722184        $user_identity = $user->exists() ? $user->display_name : '';
    function comment_form( $args = array(), $post_id = null ) { 
    22522264        // Ensure that the filtered args contain all required default values.
    22532265        $args = array_merge( $defaults, $args );
    22542266
    2255         if ( comments_open( $post_id ) ) : ?>
     2267        /**
     2268         * Fires before the comment form.
     2269         *
     2270         * @since 3.0.0
     2271         */
     2272        do_action( 'comment_form_before' );
     2273        ?>
     2274        <div id="respond" class="comment-respond">
    22562275                <?php
    2257                 /**
    2258                  * Fires before the comment form.
    2259                  *
    2260                  * @since 3.0.0
    2261                  */
    2262                 do_action( 'comment_form_before' );
    2263                 ?>
    2264                 <div id="respond" class="comment-respond">
    2265                         <?php
    2266                         echo $args['title_reply_before'];
     2276                echo $args['title_reply_before'];
    22672277
    2268                         comment_form_title( $args['title_reply'], $args['title_reply_to'] );
     2278                comment_form_title( $args['title_reply'], $args['title_reply_to'] );
    22692279
    2270                         echo $args['cancel_reply_before'];
     2280                echo $args['cancel_reply_before'];
    22712281
    2272                         cancel_comment_reply_link( $args['cancel_reply_link'] );
     2282                cancel_comment_reply_link( $args['cancel_reply_link'] );
    22732283
    2274                         echo $args['cancel_reply_after'];
     2284                echo $args['cancel_reply_after'];
    22752285
    2276                         echo $args['title_reply_after'];
     2286                echo $args['title_reply_after'];
    22772287
    2278                         if ( get_option( 'comment_registration' ) && !is_user_logged_in() ) :
    2279                                 echo $args['must_log_in'];
     2288                if ( get_option( 'comment_registration' ) && !is_user_logged_in() ) :
     2289                        echo $args['must_log_in'];
     2290                        /**
     2291                         * Fires after the HTML-formatted 'must log in after' message in the comment form.
     2292                         *
     2293                         * @since 3.0.0
     2294                         */
     2295                        do_action( 'comment_form_must_log_in_after' );
     2296                else : ?>
     2297                        <form action="<?php echo esc_url( $args['action'] ); ?>" method="post" id="<?php echo esc_attr( $args['id_form'] ); ?>" class="<?php echo esc_attr( $args['class_form'] ); ?>"<?php echo $html5 ? ' novalidate' : ''; ?>>
     2298                                <?php
    22802299                                /**
    2281                                  * Fires after the HTML-formatted 'must log in after' message in the comment form.
     2300                                 * Fires at the top of the comment form, inside the form tag.
    22822301                                 *
    22832302                                 * @since 3.0.0
    22842303                                 */
    2285                                 do_action( 'comment_form_must_log_in_after' );
    2286                         else : ?>
    2287                                 <form action="<?php echo esc_url( $args['action'] ); ?>" method="post" id="<?php echo esc_attr( $args['id_form'] ); ?>" class="<?php echo esc_attr( $args['class_form'] ); ?>"<?php echo $html5 ? ' novalidate' : ''; ?>>
    2288                                         <?php
     2304                                do_action( 'comment_form_top' );
     2305
     2306                                if ( is_user_logged_in() ) :
    22892307                                        /**
    2290                                          * Fires at the top of the comment form, inside the form tag.
     2308                                         * Filters the 'logged in' message for the comment form for display.
    22912309                                         *
    22922310                                         * @since 3.0.0
     2311                                         *
     2312                                         * @param string $args_logged_in The logged-in-as HTML-formatted message.
     2313                                         * @param array  $commenter      An array containing the comment author's
     2314                                         *                               username, email, and URL.
     2315                                         * @param string $user_identity  If the commenter is a registered user,
     2316                                         *                               the display name, blank otherwise.
    22932317                                         */
    2294                                         do_action( 'comment_form_top' );
     2318                                        echo apply_filters( 'comment_form_logged_in', $args['logged_in_as'], $commenter, $user_identity );
    22952319
    2296                                         if ( is_user_logged_in() ) :
    2297                                                 /**
    2298                                                  * Filters the 'logged in' message for the comment form for display.
    2299                                                  *
    2300                                                  * @since 3.0.0
    2301                                                  *
    2302                                                  * @param string $args_logged_in The logged-in-as HTML-formatted message.
    2303                                                  * @param array  $commenter      An array containing the comment author's
    2304                                                  *                               username, email, and URL.
    2305                                                  * @param string $user_identity  If the commenter is a registered user,
    2306                                                  *                               the display name, blank otherwise.
    2307                                                  */
    2308                                                 echo apply_filters( 'comment_form_logged_in', $args['logged_in_as'], $commenter, $user_identity );
     2320                                        /**
     2321                                         * Fires after the is_user_logged_in() check in the comment form.
     2322                                         *
     2323                                         * @since 3.0.0
     2324                                         *
     2325                                         * @param array  $commenter     An array containing the comment author's
     2326                                         *                              username, email, and URL.
     2327                                         * @param string $user_identity If the commenter is a registered user,
     2328                                         *                              the display name, blank otherwise.
     2329                                         */
     2330                                        do_action( 'comment_form_logged_in_after', $commenter, $user_identity );
    23092331
    2310                                                 /**
    2311                                                  * Fires after the is_user_logged_in() check in the comment form.
    2312                                                  *
    2313                                                  * @since 3.0.0
    2314                                                  *
    2315                                                  * @param array  $commenter     An array containing the comment author's
    2316                                                  *                              username, email, and URL.
    2317                                                  * @param string $user_identity If the commenter is a registered user,
    2318                                                  *                              the display name, blank otherwise.
    2319                                                  */
    2320                                                 do_action( 'comment_form_logged_in_after', $commenter, $user_identity );
     2332                                else :
    23212333
    2322                                         else :
     2334                                        echo $args['comment_notes_before'];
    23232335
    2324                                                 echo $args['comment_notes_before'];
     2336                                endif;
    23252337
    2326                                         endif;
     2338                                // Prepare an array of all fields, including the textarea
     2339                                $comment_fields = array( 'comment' => $args['comment_field'] ) + (array) $args['fields'];
    23272340
    2328                                         // Prepare an array of all fields, including the textarea
    2329                                         $comment_fields = array( 'comment' => $args['comment_field'] ) + (array) $args['fields'];
     2341                                /**
     2342                                 * Filters the comment form fields, including the textarea.
     2343                                 *
     2344                                 * @since 4.4.0
     2345                                 *
     2346                                 * @param array $comment_fields The comment fields.
     2347                                 */
     2348                                $comment_fields = apply_filters( 'comment_form_fields', $comment_fields );
    23302349
    2331                                         /**
    2332                                          * Filters the comment form fields, including the textarea.
    2333                                          *
    2334                                          * @since 4.4.0
    2335                                          *
    2336                                          * @param array $comment_fields The comment fields.
    2337                                          */
    2338                                         $comment_fields = apply_filters( 'comment_form_fields', $comment_fields );
     2350                                // Get an array of field names, excluding the textarea
     2351                                $comment_field_keys = array_diff( array_keys( $comment_fields ), array( 'comment' ) );
    23392352
    2340                                         // Get an array of field names, excluding the textarea
    2341                                         $comment_field_keys = array_diff( array_keys( $comment_fields ), array( 'comment' ) );
     2353                                // Get the first and the last field name, excluding the textarea
     2354                                $first_field = reset( $comment_field_keys );
     2355                                $last_field  = end( $comment_field_keys );
    23422356
    2343                                         // Get the first and the last field name, excluding the textarea
    2344                                         $first_field = reset( $comment_field_keys );
    2345                                         $last_field  = end( $comment_field_keys );
     2357                                foreach ( $comment_fields as $name => $field ) {
    23462358
    2347                                         foreach ( $comment_fields as $name => $field ) {
     2359                                        if ( 'comment' === $name ) {
    23482360
    2349                                                 if ( 'comment' === $name ) {
     2361                                                /**
     2362                                                 * Filters the content of the comment textarea field for display.
     2363                                                 *
     2364                                                 * @since 3.0.0
     2365                                                 *
     2366                                                 * @param string $args_comment_field The content of the comment textarea field.
     2367                                                 */
     2368                                                echo apply_filters( 'comment_form_field_comment', $field );
     2369
     2370                                                echo $args['comment_notes_after'];
     2371
     2372                                        } elseif ( ! is_user_logged_in() ) {
    23502373
     2374                                                if ( $first_field === $name ) {
    23512375                                                        /**
    2352                                                          * Filters the content of the comment textarea field for display.
     2376                                                         * Fires before the comment fields in the comment form, excluding the textarea.
    23532377                                                         *
    23542378                                                         * @since 3.0.0
    2355                                                          *
    2356                                                          * @param string $args_comment_field The content of the comment textarea field.
    23572379                                                         */
    2358                                                         echo apply_filters( 'comment_form_field_comment', $field );
    2359 
    2360                                                         echo $args['comment_notes_after'];
    2361 
    2362                                                 } elseif ( ! is_user_logged_in() ) {
     2380                                                        do_action( 'comment_form_before_fields' );
     2381                                                }
    23632382
    2364                                                         if ( $first_field === $name ) {
    2365                                                                 /**
    2366                                                                  * Fires before the comment fields in the comment form, excluding the textarea.
    2367                                                                  *
    2368                                                                  * @since 3.0.0
    2369                                                                  */
    2370                                                                 do_action( 'comment_form_before_fields' );
    2371                                                         }
     2383                                                /**
     2384                                                 * Filters a comment form field for display.
     2385                                                 *
     2386                                                 * The dynamic portion of the filter hook, `$name`, refers to the name
     2387                                                 * of the comment form field. Such as 'author', 'email', or 'url'.
     2388                                                 *
     2389                                                 * @since 3.0.0
     2390                                                 *
     2391                                                 * @param string $field The HTML-formatted output of the comment form field.
     2392                                                 */
     2393                                                echo apply_filters( "comment_form_field_{$name}", $field ) . "\n";
    23722394
     2395                                                if ( $last_field === $name ) {
    23732396                                                        /**
    2374                                                          * Filters a comment form field for display.
    2375                                                          *
    2376                                                          * The dynamic portion of the filter hook, `$name`, refers to the name
    2377                                                          * of the comment form field. Such as 'author', 'email', or 'url'.
     2397                                                         * Fires after the comment fields in the comment form, excluding the textarea.
    23782398                                                         *
    23792399                                                         * @since 3.0.0
    2380                                                          *
    2381                                                          * @param string $field The HTML-formatted output of the comment form field.
    23822400                                                         */
    2383                                                         echo apply_filters( "comment_form_field_{$name}", $field ) . "\n";
    2384 
    2385                                                         if ( $last_field === $name ) {
    2386                                                                 /**
    2387                                                                  * Fires after the comment fields in the comment form, excluding the textarea.
    2388                                                                  *
    2389                                                                  * @since 3.0.0
    2390                                                                  */
    2391                                                                 do_action( 'comment_form_after_fields' );
    2392                                                         }
     2401                                                        do_action( 'comment_form_after_fields' );
    23932402                                                }
    23942403                                        }
     2404                                }
    23952405
    2396                                         $submit_button = sprintf(
    2397                                                 $args['submit_button'],
    2398                                                 esc_attr( $args['name_submit'] ),
    2399                                                 esc_attr( $args['id_submit'] ),
    2400                                                 esc_attr( $args['class_submit'] ),
    2401                                                 esc_attr( $args['label_submit'] )
    2402                                         );
     2406                                $submit_button = sprintf(
     2407                                        $args['submit_button'],
     2408                                        esc_attr( $args['name_submit'] ),
     2409                                        esc_attr( $args['id_submit'] ),
     2410                                        esc_attr( $args['class_submit'] ),
     2411                                        esc_attr( $args['label_submit'] )
     2412                                );
    24032413
    2404                                         /**
    2405                                         * Filters the submit button for the comment form to display.
    2406                                         *
    2407                                         * @since 4.2.0
    2408                                         *
    2409                                         * @param string $submit_button HTML markup for the submit button.
    2410                                         * @param array  $args          Arguments passed to `comment_form()`.
    2411                                         */
    2412                                         $submit_button = apply_filters( 'comment_form_submit_button', $submit_button, $args );
     2414                                /**
     2415                                * Filters the submit button for the comment form to display.
     2416                                *
     2417                                * @since 4.2.0
     2418                                *
     2419                                * @param string $submit_button HTML markup for the submit button.
     2420                                * @param array  $args          Arguments passed to `comment_form()`.
     2421                                */
     2422                                $submit_button = apply_filters( 'comment_form_submit_button', $submit_button, $args );
    24132423
    2414                                         $submit_field = sprintf(
    2415                                                 $args['submit_field'],
    2416                                                 $submit_button,
    2417                                                 get_comment_id_fields( $post_id )
    2418                                         );
     2424                                $submit_field = sprintf(
     2425                                        $args['submit_field'],
     2426                                        $submit_button,
     2427                                        get_comment_id_fields( $post_id )
     2428                                );
    24192429
    2420                                         /**
    2421                                         * Filters the submit field for the comment form to display.
    2422                                         *
    2423                                         * The submit field includes the submit button, hidden fields for the
    2424                                         * comment form, and any wrapper markup.
    2425                                         *
    2426                                         * @since 4.2.0
    2427                                         *
    2428                                         * @param string $submit_field HTML markup for the submit field.
    2429                                         * @param array  $args         Arguments passed to comment_form().
    2430                                         */
    2431                                         echo apply_filters( 'comment_form_submit_field', $submit_field, $args );
     2430                                /**
     2431                                * Filters the submit field for the comment form to display.
     2432                                *
     2433                                * The submit field includes the submit button, hidden fields for the
     2434                                * comment form, and any wrapper markup.
     2435                                *
     2436                                * @since 4.2.0
     2437                                *
     2438                                * @param string $submit_field HTML markup for the submit field.
     2439                                * @param array  $args         Arguments passed to comment_form().
     2440                                */
     2441                                echo apply_filters( 'comment_form_submit_field', $submit_field, $args );
    24322442
    2433                                         /**
    2434                                          * Fires at the bottom of the comment form, inside the closing </form> tag.
    2435                                          *
    2436                                          * @since 1.5.0
    2437                                          *
    2438                                          * @param int $post_id The post ID.
    2439                                          */
    2440                                         do_action( 'comment_form', $post_id );
    2441                                         ?>
    2442                                 </form>
    2443                         <?php endif; ?>
    2444                 </div><!-- #respond -->
    2445                 <?php
    2446                 /**
    2447                  * Fires after the comment form.
    2448                  *
    2449                  * @since 3.0.0
    2450                  */
    2451                 do_action( 'comment_form_after' );
    2452         else :
    2453                 /**
    2454                  * Fires after the comment form if comments are closed.
    2455                  *
    2456                  * @since 3.0.0
    2457                  */
    2458                 do_action( 'comment_form_comments_closed' );
    2459         endif;
     2443                                /**
     2444                                 * Fires at the bottom of the comment form, inside the closing </form> tag.
     2445                                 *
     2446                                 * @since 1.5.0
     2447                                 *
     2448                                 * @param int $post_id The post ID.
     2449                                 */
     2450                                do_action( 'comment_form', $post_id );
     2451                                ?>
     2452                        </form>
     2453                <?php endif; ?>
     2454        </div><!-- #respond -->
     2455        <?php
     2456
     2457        /**
     2458         * Fires after the comment form.
     2459         *
     2460         * @since 3.0.0
     2461         */
     2462        do_action( 'comment_form_after' );
    24602463}