Listă dropdown în widget WordPress

20 feb. 2011, 22:04:57
Vizualizări: 19.8K
Voturi: 2

Ok, dezvolt propriul meu widget și am o problemă MAJORĂ.

Nu știu cum să preiau și să salvez valorile din selecturile HTML.

Exemplu simplu:

/* inițializare TITLU */
function widget( $args, $instance ) {
        extract( $args );
        $title = apply_filters('widget_title', $instance['title'] );

(...)

/* cod de actualizare pentru TITLU */
    function update( $new_instance, $old_instance ) {
        $instance = $old_instance;
        $instance['title'] = strip_tags( $new_instance['title'] );

(...)

/* crearea câmpului TITLU în zona de administrare a widget-urilor */

 <p>
    <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e('Titlu:', '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>

(...)

OK. Când scriu

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

Va afișa titlul meu!

Dar am această listă:

<label for="<?php echo $this->get_field_id( 'example' ); ?> "><?php _e('Tip hartă:', 'example'); ?></label>
<select id="<?php echo $this->get_field_id( 'example' ); ?>" name="<?php echo $this->get_field_name( 'example' ); ?>">
     <option value="supervalue" selected="selected">Valoare Super</option>
</select>

Și

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

Nu returnează NIMIC. Am căutat peste tot, inclusiv în default-widgets.php, dar nu înțeleg nimic deoarece toate plugin-urile implicite folosesc în mare parte liste de opțiuni generate dinamic.

Am folosit o listă cu un singur element, dar de fapt e mai lungă, și nu sunt sigur cum să salvez elementul selectat, pentru că nu știu cum să accesez valoarea acestui element.

Aveți idei? Am petrecut toată ziua cu asta și încep să înnebunesc încetul cu încetul.

[editat]

Nu v-am arătat funcția de actualizare deoarece, așa cum am menționat mai sus, folosesc același cod de actualizare pentru fiecare funcție.

function update( $new_instance, $old_instance ) {

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

    return $instance;

}
5
Comentarii

Presupun că folosești o declarație de clasă pentru widget, așa că postează funcția ta de update și cred că știu care este problema.

Bainternet Bainternet
21 feb. 2011 01:47:15

Nu știu dacă contează, dar nu ar trebui să fie name="<?php echo $this->get_field_name( 'example' );? Folosești get_field_id() mai sus.

wyrfel wyrfel
21 feb. 2011 02:57:05

De ce nu este noul câmp inclus în rutina de update? De exemplu: $instance['example'] = your_chosen_sanitization_function( $new_instance['example'] );

t31os t31os
21 feb. 2011 10:49:01

@construcție site-uri gata! :)

Wordpressor Wordpressor
21 feb. 2011 12:54:33

Ar fi mult mai ușor să depanez problema dacă ai putea afișa întregul cod, nu văd nimic incorect în ceea ce ai postat până acum.

t31os t31os
21 feb. 2011 15:41:49
Toate răspunsurile la întrebare 2
2

Vezi comentariul meu de mai sus...folosești get_field_id() pe atributul name, unde ar trebui să fie get_field_name().

get_field_id() întoarce 'widget-'.$this->id_base.'-'.$this->number.'-'.$field_name,
în timp ce
get_field_name() întoarce 'widget-'.$this->id_base.'[' . $this->number . '][' . $field_name.']'

21 feb. 2011 14:13:17
Comentarii

Care este diferența dacă folosesc get_field_id peste tot? Și în primul exemplu care funcționează?

Wordpressor Wordpressor
21 feb. 2011 14:56:33

În primul exemplu folosești get_field_id() pe atributul id și get_field_name() pe atributul name. În al doilea exemplu folosești get_field_id() pe ambele. Ceea ce nu funcționează, deoarece acum valoarea câmpului tău este înregistrată ca $_POST['widget-base-num-name'] în loc de $_POST['widget-base']['num']['name']. Evident, WP mapează $_POST['widget-base']['num'] în primul parametru al update(), dar nu poate face asta, așa că valoarea câmpului tău se pierde.

wyrfel wyrfel
21 feb. 2011 18:48:50
0

Recent am scris un articol despre casetele de selectare WordPress în interfața de administrare, ar putea fi util pentru unii dintre voi:

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

18 mar. 2014 11:48:58