WordPress.org

Make WordPress Core

Ticket #28477: 28477.3.diff

File 28477.3.diff, 3.4 KB (added by celloexpressions, 6 years ago)

Remove explicit text type output, don't use a whitelist of allowed attributes.

  • src/wp-admin/css/customize-controls.css

     
    289289        line-height: 28px;
    290290}
    291291
    292 .customize-control input[type="text"] {
     292.customize-control input[type="text"],
     293.customize-control input[type="password"],
     294.customize-control input[type="email"],
     295.customize-control input[type="number"],
     296.customize-control input[type="search"],
     297.customize-control input[type="tel"],
     298.customize-control input[type="url"] {
    293299        width: 98%;
    294300        line-height: 18px;
    295301        margin: 0;
    296302}
    297303
     304.customize-control-textarea textarea {
     305        width: 100%;
     306        resize: vertical;
     307}
     308
    298309.customize-control select {
    299310        min-width: 50%;
    300311        max-width: 100%;
  • src/wp-includes/class-wp-customize-control.php

     
    6565         * @access public
    6666         * @var array
    6767         */
     68        public $input_attrs = array();
     69
     70        /**
     71         * @access public
     72         * @var array
     73         */
    6874        public $json = array();
    6975
    7076        /**
     
    245251        }
    246252
    247253        /**
     254         * Render the custom attributes for the control's input element.
     255         *
     256         * @since 4.0.0
     257         */
     258        public function input_attrs() {
     259                $attrs = $this->input_attrs;
     260                foreach( $attrs as $attr => $value ) {
     261                        echo $attr . '="' . esc_attr( $value ) . '" ';
     262                }
     263        }
     264
     265        /**
    248266         * Render the control's content.
    249267         *
    250268         * Allows the content to be overriden without having to rewrite the wrapper in $this->render().
    251269         *
    252          * Supports basic input types `text`, `checkbox`, `radio`, `select` and `dropdown-pages`.
     270         * Supports basic input types `text`, `checkbox`, `textarea`, `radio`, `select` and `dropdown-pages`.
     271         * Additional input types such as `email`, `url`, `number`, `radio`, and `date` are supported implicitly.
    253272         *
    254273         * @since 3.4.0
    255274         */
    256275        protected function render_content() {
    257276                switch( $this->type ) {
    258                         case 'text':
     277                        case 'checkbox':
    259278                                ?>
    260279                                <label>
    261                                         <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
    262                                         <input type="text" value="<?php echo esc_attr( $this->value() ); ?>" <?php $this->link(); ?> />
     280                                        <input type="checkbox" value="<?php echo esc_attr( $this->value() ); ?>" <?php $this->link(); checked( $this->value() ); ?> />
     281                                        <?php echo esc_html( $this->label ); ?>
    263282                                </label>
    264283                                <?php
    265284                                break;
    266                         case 'checkbox':
     285                        case 'textarea':
    267286                                ?>
    268287                                <label>
    269                                         <input type="checkbox" value="<?php echo esc_attr( $this->value() ); ?>" <?php $this->link(); checked( $this->value() ); ?> />
    270                                         <?php echo esc_html( $this->label ); ?>
     288                                        <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
     289                                        <textarea rows="5" <?php $this->link(); ?>><?php echo esc_textarea( $this->value() ); ?></textarea>
    271290                                </label>
    272291                                <?php
    273292                                break;
     
    325344                                        $dropdown
    326345                                );
    327346                                break;
     347                        default:
     348                                ?>
     349                                <label>
     350                                        <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
     351                                        <input type="<?php echo esc_attr( $this->type ); ?>" <?php $this->input_attrs(); ?> value="<?php echo esc_attr( $this->value() ); ?>" <?php $this->link(); ?> />
     352                                </label>
     353                                <?php
     354                                break;
    328355                }
    329356        }
    330357}