web-dev-qa-db-fra.com

Développement de widgets - Les options de liste déroulante ne seront pas enregistrées

Ainsi, j’ai réussi à ajouter une option déroulante. Le problème, c’est que lorsque je clique sur Enregistrer, toutes les options sont supprimées. Cependant, l’option choisie est implémentée avec succès.

Voici le code pertinent:

function widget($args, $instance) {
        extract( $args );

        $pfxattribution = $instance['pfx-attribution'];
}

<p>
            <label for="<?php echo $this->get_field_id('pfx-attribution'); ?>"><?php _e('Choose attribution:'); ?></label>
            <select id="<?php echo $this->get_field_id('pfx-attribution'); ?>" name="<?php echo $this->get_field_name('pfx-attribution'); ?>" class="widefat" /> 
            <option>Purefx</option>
            <option>Foreign Exchange</option>
            <option>Currency Exchange</option>
            </select>
            </p>

function update($new_instance, $old_instance) {
        // Get the old values
        $instance = $old_instance;

        // Update with any new values (and sanitise input)
        $instance['pfx-attribution'] = strip_tags( $new_instance['pfx-attribution'] );

       return $instance;
}

Toute aide est grandement appréciée

6
Danny

Danny, ceci est à peu près levé directement d'un plug-in que j'ai créé:

 <?php function form($instance){    
    $instance = wp_parse_args( (array) $instance, $this->w_arg );
  ?>
  <p>
    <select id="<?php echo $this->get_field_id('order'); ?>" name="<?php echo $this->get_field_name('order'); ?>" type="text">
        <option value="asc" <?php selected($instance['order'], 'asc'); ?>>ASC </option>
        <option value="desc" <?php selected($instance['order'], 'desc');?>>DESC </option>
    </select>
</p>

<?php
  }
?>

Sans voir le reste de votre code, je ne peux pas être sûr de la racine du problème, mais il se peut que le formulaire ne soit pas intégré à la fonction de formulaire. Si ce qui précède ne semble pas fonctionner pour vous, peut-être coller votre classe de widgets?

Je devrais peut-être ajouter que ma classe de widgets a une variable w_arg, un tableau de valeurs par défaut! Par exemple.

var $w_arg = array(
        'order'=> 'ASC'
        );
4
Stephen Harris

Votre <option>s a besoin de value= ou ils n'envoient aucune valeur ... essentiellement en ce moment value='', c'est-à-dire, je parierais, ce que vous voyez.

0
mor7ifer

Votre <select> ne doit pas avoir d'attribut value, ni d'attribut type="text".

0
Geert