WordPress.org

Make WordPress Core

Ticket #20302: 20302.2.diff

File 20302.2.diff, 5.4 KB (added by stevegrunwell, 4 years ago)

Rename "attributes" to "attributes_form" (matching the existing pattern) and add necessary DocBlock for this new argument. Tests have also been refactored to remove closures.

  • src/wp-includes/comment-template.php

     
    12421242 * @global int        $user_ID
    12431243 * @global string     $user_identity
    12441244 * @global bool       $overridden_cpage
    1245  * @global bool       $withcomments 
     1245 * @global bool       $withcomments
    12461246 *
    12471247 * @param string $file              Optional. The file to load. Default '/comments.php'.
    12481248 * @param bool   $separate_comments Optional. Whether to separate the comments by comment type.
     
    20262026 *                                        fields. Default: '<p class="form-submit">%1$s %2$s</a>', where %1$s is the
    20272027 *                                        submit button markup and %2$s is the comment hidden fields.
    20282028 *     @type string $format               The comment form format. Default 'xhtml'. Accepts 'xhtml', 'html5'.
     2029 *     @type array  $attributes_form      Additional attributes to apply to
    20292030 * }
    20302031 * @param int|WP_Post $post_id Post ID or WP_Post object to generate the form for. Default current post.
    20312032 */
     
    20892090                'submit_button'        => '<input name="%1$s" type="submit" id="%2$s" class="%3$s" value="%4$s" />',
    20902091                'submit_field'         => '<p class="form-submit">%1$s %2$s</p>',
    20912092                'format'               => 'xhtml',
     2093                'attributes_form'      => array(),
    20922094        );
    20932095
    20942096        /**
     
    21052107        // Ensure that the filtered args contain all required default values.
    21062108        $args = array_merge( $defaults, $args );
    21072109
     2110        // Build the <form> attributes.
     2111        $attributes = array(
     2112                'action'     => site_url( '/wp-comments-post.php' ),
     2113                'method'     => 'post',
     2114                'id'         => $args['id_form'],
     2115                'class'      => $args['class_form'],
     2116                'novalidate' => $html5,
     2117        );
     2118
     2119        if ( is_array( $args['attributes_form'] ) ) {
     2120                $attributes = array_merge( $attributes, $args['attributes_form'] );
     2121        }
     2122
    21082123        if ( comments_open( $post_id ) ) : ?>
    21092124                <?php
    21102125                /**
     
    21372152                                 */
    21382153                                do_action( 'comment_form_must_log_in_after' );
    21392154                        else : ?>
    2140                                 <form action="<?php echo site_url( '/wp-comments-post.php' ); ?>" method="post" id="<?php echo esc_attr( $args['id_form'] ); ?>" class="<?php echo esc_attr( $args['class_form'] ); ?>"<?php echo $html5 ? ' novalidate' : ''; ?>>
     2155                                <?php
     2156                                        echo '<form';
     2157
     2158                                        // Build the form attributes.
     2159                                        foreach ( $attributes as $attr_name => $attr_val ) {
     2160                                                if ( true === $attr_val ) {
     2161                                                        echo ' ' . esc_attr( $attr_name );
     2162                                                } else {
     2163                                                        printf( ' %s="%s"', esc_attr( $attr_name ), esc_attr( $attr_val ) );
     2164                                                }
     2165                                        }
     2166
     2167                                        echo '>';
     2168                                ?>
    21412169                                        <?php
    21422170                                        /**
    21432171                                         * Fires at the top of the comment form, inside the form tag.
  • tests/phpunit/tests/comment/commentsTemplate.php

     
    685685                $this->assertSame( array( $comment_4, $comment_3 ), $found_cids );
    686686        }
    687687
     688        /**
     689         * Validate that the current attributes (action, method, id, class, and novalidate) are
     690         * still present after moving to an array-based build.
     691         *
     692         * @ticket 20302
     693         */
     694        public function test_building_comment_form_attributes_from_array() {
     695                $p = self::factory()->post->create();
     696
     697                add_filter( 'wp_get_current_commenter', array( $this, 'fake_current_commenter' ) );
     698                $this->go_to( get_permalink( $p ) );
     699                $template = get_echo( 'comments_template' );
     700                remove_filter( 'wp_get_current_commenter', array( $this, 'fake_current_commenter' ) );
     701
     702                $this->assertEquals( 1, preg_match( '|\saction="(.+)/wp-comments-post.php"|i', $template ) );
     703                $this->assertContains( 'method="post"', $template );
     704                $this->assertContains( 'id="commentform"', $template );
     705                $this->assertContains( 'class="comment-form"', $template );
     706        }
     707
     708        /**
     709         * @ticket 20302
     710         */
     711        public function test_extra_comment_form_attributes() {
     712                $p = self::factory()->post->create();
     713
     714                /**
     715                 * Anonymous function to alter the 'attributes' value for the 'comment_form_defaults' filter.
     716                 */
     717                add_filter( 'comment_form_defaults', array( $this, 'extra_comment_form_attributes_cb' ) );
     718
     719                add_filter( 'wp_get_current_commenter', array( $this, 'fake_current_commenter' ) );
     720                $this->go_to( get_permalink( $p ) );
     721                $template = get_echo( 'comments_template' );
     722                remove_filter( 'wp_get_current_commenter', array( $this, 'fake_current_commenter' ) );
     723
     724                // Validate that default attributes aren't overwritten.
     725                $this->assertContains( 'method="post"', $template );
     726                $this->assertContains( 'id="commentform"', $template );
     727                $this->assertContains( 'class="comment-form"', $template );
     728
     729                // Validate our custom attribute.
     730                $this->assertContains( 'data-test-attribute="hooray!"', $template );
     731                $this->assertContains( 'onclick="dosomething()"', $template );
     732        }
     733
     734        /**
     735         * Callback for test_extra_comment_form_attributes().
     736         *
     737         * @ticket 20302
     738         */
     739        public function extra_comment_form_attributes_cb( $defaults ) {
     740                $defaults['attributes_form'] = array(
     741                        'data-test-attribute' => 'hooray!',
     742                        'onclick'             => 'dosomething()',
     743                );
     744
     745                return $defaults;
     746        }
     747
    688748        public function fake_current_commenter( $commenter ) {
    689749                $commenter['comment_author_email'] = 'foo@example.com';
    690750                return $commenter;
    691751        }
     752
    692753}