WP Customizer JS Template not saving color field

I'm trying to create a custom typography control, I'm having problem saving the value of the color, please take a look at my code:

?php
class Customizer_Typo_Control_Typography extends WP_Customize_Control {

/**
 * The type of customize control being rendered.
 */
public $type = 'typography';

/**
 * Array
 */
public $l10n = array();

/**
 * Set up our control.
 */
public function __construct( $manager, $id, $args = array() ) {

    // Let the parent class do its thing.
    parent::__construct( $manager, $id, $args );

    // Make sure we have labels.
    $this-l10n = wp_parse_args(
        $this-l10n,
        array(
            'color'       = esc_html__( 'Font Color',   'ctypo' ),
        )
    );
}

/**
 * Add custom parameters to pass to the JS via JSON.
 */
public function to_json() {
    parent::to_json();

    // Loop through each of the settings and set up the data for it.
    foreach ( $this-settings as $setting_key = $setting_id ) {

        $this-json[ $setting_key ] = array(
            'link'  = $this-get_link( $setting_key ),
            'value' = $this-value( $setting_key ),
            'label' = isset( $this-l10n[ $setting_key ] ) ? $this-l10n[ $setting_key ] : ''
        );

    }
}

/**
 * Underscore JS template to handle the control's output.
 */
public function content_template() { ?

    # if ( data.label ) { #
        span class="customize-control-title"{{ data.label }}/span
    # } #

    # if ( data.description ) { #
        span class="description customize-control-description"{{{ data.description }}}/span
    # } #

    ul

    # if ( data.color ) { #

        li class="typography-font-color"

            # if ( data.color.label ) { #
                span class="customize-control-title"{{ data.color.label }}/span
            # } #

        input type="text" data-default-color="{{ data.color.default }}" value="{{ data.color.value }}" class="color-picker" {{{ data.color.link }}} /
        /li
    # } #


    /ul
?php } }

And here is how i print the option:

  $wp_customize-add_setting( 'p_font_color',   
  array( 'default' = '#666111',     
    'sanitize_callback' = 'sanitize_hex_color',              
    'transport' = 'postMessage' ) 
  );

 $wp_customize-add_control(
new Customizer_Typo_Control_Typography(
    $wp_customize,
    'p_typography',
    array(
        'label'       = esc_html__( 'Paragraph Typography', 'ctypo' ),
        'description' = __( 'Select how you want your paragraphs to appear.', 'ctypo' ),
        'section'     = 'p_typography',

        'settings'    = array(
            'color'       = 'p_font_color',
        ),

        'l10n'        = array(),
    )
)

);

Topic underscore theme-customizer Wordpress

Category Web


You are using content_template which is used for rendering Underscore JS template which means you will also have to create your own corresponding control in javascript using api.Control.extend({ and do the handling yourself.

however by looking at your code, that does not seem to be the case, I think if you want to change the html content you would need to override render_content like this

protected function render_content() {
    ?>
    <label>
        <?php if ( ! empty( $this->label ) ) : ?>
            <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
        <?php endif;
        if ( ! empty( $this->description ) ) : ?>
            <span class="description customize-control-description"><?php echo $this->description; ?></span>
        <?php endif; ?>
        <input type="text" <?php $this->input_attrs(); ?> value="<?php echo esc_attr( $this->value() ); ?>" <?php $this->link('color'); ?> />
    </label>
    <?php
}

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.