web-dev-qa-db-fra.com

Wordpress sélectionne la liste déroulante dans le widget

Ok, je développe mon propre widget et j'ai un énorme problème.

Je ne sais pas comment récupérer et éventuellement enregistrer du code HTML sélectionne une valeur.

Exemple simple:

/* initialize TITLE */
function widget( $args, $instance ) {
        extract( $args );
        $title = apply_filters('widget_title', $instance['title'] );

(...)

/* update code for TITLE */
    function update( $new_instance, $old_instance ) {
        $instance = $old_instance;
        $instance['title'] = strip_tags( $new_instance['title'] );

(...)

/* creating TITLE field in widgets admin area */

 <p>
    <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e('Title:', 'hybrid'); ?></label>
    <input id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" type="text" style="width:100%;" />
 </p>

(...)

D'ACCORD. Maintenant, quand je tape

<?php echo $instance['title'] ?>

Ça va montrer mon titre!

Mais j'ai cette liste:

<label for="<?php echo $this->get_field_id( 'example' ); ?> "><?php _e('Map type:', 'example'); ?></label>
<select id="<?php echo $this->get_field_id( 'example' ); ?>" name="<?php echo $this->get_field_id( 'example' ); ?>">
     <option value="supervalue" selected="selected">Super Value</option>
</select>

Et

<?php echo $instance['example'] ?>

Ne donne rien. J'ai cherché partout, y compris default-widgets.php, mais je ne comprends pas Word, car tous les plugins par défaut utilisent principalement des listes d'options générées de manière dynamique.

J'ai utilisé une seule liste d'éléments, mais en réalité elle est plus longue. Je ne sais pas non plus comment enregistrer l'élément sélectionné, car je ne sais pas comment accéder à la valeur de cet élément.

Des idées? J'ai passé toute la journée là-dessus à devenir complètement fou, lentement.

[édité]

Je ne vous ai pas montré la fonction de mise à jour car, comme je l'ai mentionné ci-dessus, j'utilise le même code de mise à jour pour chaque fonction.

 function update( $new_instance, $old_instance ) {

    $instance = $old_instance;
    $instance['example'] = strip_tags( $new_instance['example'] );    

    return $instance;

}
1
Wordpressor

Voir mon commentaire ci-dessus ... vous utilisez get_field_id() sur l'attribut name, où il devrait s'agir de get_field_name().

get_field_id() renvoie 'widget-'.$this->id_base.'-'.$this->number.'-'.$field_name,
tandis que
get_field_name() renvoie 'widget-'.$this->id_base.'[' . $this->number . '][' . $field_name.']'

8
wyrfel

J'ai récemment écrit un article sur les boîtes de sélection wordpress sur le backend, cela pourrait aider certains d'entre vous:

http://wp-dreams.com/wordpress-widget-select-box/

0
Ernest Marcinko