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
)
)
)
);
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.