web-dev-qa-db-fra.com

Impossible d'assainir le contrôle de sélection dans la personnalisation de l'API

J'utilise wordpress 4.7.2.

Je crée une section de personnalisation pour mon thème personnalisé. Ceci est mon contrôle de sélection.

 $wp_customize->add_setting( $this->slug . '_blog[pagination_type]', array(
            'default'           => 'classic-pagination',
            'transport'         => 'postMessage',
            'type'              => 'theme_mod',
            'sanitize_callback' => 'my_theme_sanitize_select',
        ) );

        $wp_customize->add_control( $this->slug . '_blog[pagination_type]', array(
            'label'    => 'Pagination Type',
            'section'  => $this->slug . '_blog_section',
            'type'     => 'select',
            'choices'  => array(
                'classic-pagination' => 'Classic Pagination',
                'load-more-button'   => 'Load More Button'
                ),
            'priority' => 18,
        ) );

et ma fonction sanitize_callback est

public function my_theme_sanitize_select( $input, $setting ) {
    // Ensure input is a slug
    $input = sanitize_key( $input );
    // Get list of choices from the control
    // associated with the setting
    $choices = $setting->manager->get_control( $setting->id )->choices;
    // If the input is a valid key, return it;
    // otherwise, return the default
    return ( array_key_exists( $input, $choices ) ? $input : $setting->default );
}

Erreur d'affichage Valeur invalide, lors de la tentative de sauvegarde des données.

J'ai essayé même avec juste la fonction sanitize_key mais ne peux pas le faire correctement

public function my_theme_sanitize_select( $input ) {
        return sanitize_key( $input );
    }

et même à

public function my_theme_sanitize_select( $input ) {
        return $input;
    }

et

public function my_theme_sanitize_select( $input ) {
        return true;
    }

mais lorsque je n’appelle aucune fonction de désinfection, cela fonctionne correctement. cela signifie que je fais une erreur en créant sanitize_callback (), mais que dans référence la fonction de rappel a le même nom et la même définition.

après cela, j’ai cherché un problème similaire et obtenu un mais je n’ai pas pu résoudre ce problème, aidez-moi, s’il vous plaît.

J'ai parcouru les codes principaux et trouvé dans WP_Customize_Setting class sanitize() mes données d'entrée deviennent null. mais ne pouvait pas avoir plus d'idée.

1
Prafulla Kumar Sahu

La logique add_setting ne peut pas trouver la fonction my_theme_sanitize_select, vous devez lui indiquer où elle se trouve:

'sanitize_callback'    => array( $this, 'my_theme_sanitize_select' ),

rappelez-vous que votre fonction est dans une classe, donc ajoutez-la à votre classe:

public function my_theme_sanitize_select( $input, $setting ) {
    $from_parent = my_theme_sanitize_select( $input, $setting );
    return $from_parent;
}
1
David Lee