web-dev-qa-db-fra.com

Comment obtenir input_attrs dans la fonction sanitize?

Lorsque j'essaie d'obtenir input_attrs dans la fonction de nettoyage, j'ai toujours des erreurs comme
Essayer d'obtenir la propriété de non-objet dans ...

Comment faire ?
Merci d'avance.

Classe de contrôle:

class MY_Customize_Number_Control extends WP_Customize_Control {

    public $type = 'number';

    /**
     * Render the control in the customizer
     *
     * @since 1.0
     */
    public function render_content() {
        $input_id = '_customize-input-' . $this->id;
        $description_id = '_customize-description-' . $this->id;
        ?>
        <?php if ( ! empty( $this->label ) ) : ?>
            <label for="<?php echo esc_attr( $input_id ); ?>" class="customize-control-title"><?php echo esc_html( $this->label ); ?></label>
        <?php endif; ?>
        <?php if ( ! empty( $this->description ) ) : ?>
            <span id="<?php echo esc_attr( $description_id ); ?>" class="description customize-control-description"><?php echo $this->description; ?></span>
        <?php endif; ?>

        <input type="number" id="<?php echo esc_attr( $input_id ); ?>" value="<?php echo esc_attr( $this->value() ); ?>" <?php $this->input_attrs(); ?> <?php $this->link(); ?>>
        <?php
    }

}

Désinfecter:

function my_sanitize_number( $input, $setting ) {
    $input_attrs = $setting->manager->get_control( $setting->id )->input_attrs;
    $min = $input_attrs['min'] ? $input_attrs['min'] : '';
    $max = $input_attrs['max'] ? $input_attrs['max'] : '';

    if ( isset( $input ) && is_numeric( $input ) ) {
        if( is_array( $input_attrs ) ) {
            if ( isset( $min ) && is_numeric( $min ) ) {
                if ( $input < $min ) {
                    $input = $min;
                }
            }
            if ( isset( $max ) && is_numeric( $max ) ) {
                if ( $input > $max ) {
                    $input = $max;
                }
            }
        }
        return $input;
    } else {
        return $setting->default;
    }
}

Contrôle:

$wp_customize->add_setting(
    'my_custom_num', array(
        'default'           => 5,
        'sanitize_callback' => 'my_sanitize_number',
        'transport'         => 'refresh'
    )
);
$wp_customize->add_control(
    new MY_Customize_Number_Control(
        $wp_customize,
        'custom_num',
        array(
            'settings'    => 'my_custom_num',
            'priority'    => 6,
            'section'     => 'my_section',
            'label'       => esc_html__( 'Number of post to display', 'mytheme' ),
            'description' => esc_html__( 'Choose how many posts to display', 'mytheme' ),
            'type'        => 'number',
            'input_attrs' => array(
                'min' => 0,
                'max' => 20
            )
        )
    )
);
1
Michael

Votre contrôle s'appelle custom_num mais votre paramètre s'appelle my_custom_num. Modifiez la fonction sanitize de votre paramètre pour utiliser l'ancienne:

$input_attrs = $setting->manager->get_control( 'custom_num' )->input_attrs;

Voir aussi le Personnaliser les contraintes de validité des entrées , où vous pouvez voir comment obtenir le contrôle pour un paramètre donné sans avoir à le coder en dur:

$controls = array();
foreach ( $setting->manager->controls() as $control ) {
    if ( in_array( $setting, $other_control->settings, true ) ) {
        $controls[] = $control;
    }
}
if ( empty( $controls ) ) {
    return;
}

Si $control n'est pas null, il est associé à ce $setting. Notez cependant qu'un paramètre peut ne pas être associé à un contrôle ou à plusieurs paramètres. Vous devez donc prendre en compte ces cas.

0
Weston Ruter