WordPress.org

Make WordPress Core

Ticket #28477: 28477.2.diff

File 28477.2.diff, 3.3 KB (added by celloexpressions, 6 years ago)

Add core textarea type, support for arbitrary types and attributes.

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

     
    157157        line-height: 28px;
    158158}
    159159
    160 .customize-control input[type="text"] {
     160.customize-control input[type="text"],
     161.customize-control input[type="password"],
     162.customize-control input[type="email"],
     163.customize-control input[type="number"],
     164.customize-control input[type="search"],
     165.customize-control input[type="tel"],
     166.customize-control input[type="url"] {
    161167        width: 98%;
    162168        line-height: 18px;
    163169        margin: 0;
    164170}
    165171
     172.customize-control-textarea textarea {
     173        width: 100%;
     174        resize: vertical;
     175}
     176
    166177.customize-control select {
    167178        min-width: 50%;
    168179        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                $allowed_attrs = array( 'class', 'style', 'title', 'spellcheck', 'placeholder', 'required', 'pattern', 'min', 'max', 'step' );
     261                foreach( $attrs as $attr => $value ) {
     262                        if ( in_array( $attr, $allowed_attrs ) ) {
     263                                echo $attr . '="' . esc_attr( $value ) . '" ';
     264                        }
     265                }
     266        }
     267
     268        /**
    248269         * Render the control's content.
    249270         *
    250271         * Allows the content to be overriden without having to rewrite the wrapper in $this->render().
    251272         *
    252          * Supports basic input types `text`, `checkbox`, `radio`, `select` and `dropdown-pages`.
     273         * Supports basic input types `text`, `checkbox`, `textarea`, `radio`, `select` and `dropdown-pages`.
     274         * Additional input types such as `email`, `url`, and `date` are supported implicitly.
    253275         *
    254276         * @since 3.4.0
    255277         */
     
    259281                                ?>
    260282                                <label>
    261283                                        <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(); ?> />
     284                                        <input type="text" <?php $this->input_attrs(); ?> value="<?php echo esc_attr( $this->value() ); ?>" <?php $this->link(); ?> />
    263285                                </label>
    264286                                <?php
    265287                                break;
     
    271293                                </label>
    272294                                <?php
    273295                                break;
     296                        case 'textarea':
     297                                ?>
     298                                <label>
     299                                        <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
     300                                        <textarea rows="5" <?php $this->link(); ?>><?php echo esc_textarea( $this->value() ); ?></textarea>
     301                                </label>
     302                                <?php
     303                                break;
    274304                        case 'radio':
    275305                                if ( empty( $this->choices ) )
    276306                                        return;
     
    325355                                        $dropdown
    326356                                );
    327357                                break;
     358                        default:
     359                                ?>
     360                                <label>
     361                                        <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
     362                                        <input type="<?php echo esc_attr( $this->type ); ?>" <?php $this->input_attrs(); ?> value="<?php echo esc_attr( $this->value() ); ?>" <?php $this->link(); ?> />
     363                                </label>
     364                                <?php
     365                                break;
    328366                }
    329367        }
    330368}