2012-02-23 6 views
5

nUtworzyłem widżet dla użytkowników, aby wybrać obraz do wyświetlenia na pasku bocznym, który prowadzi do strony, którą wybiorą. Chciałbym, aby tę stronę wybrać za pomocą wp_dropdown_pages.wp_dropdown_pages jako opcja w moim widżecie

Jestem dobry ze względu na to, że użytkownicy ustawili adres URL zdjęcia, wysokość i szerokość, ale zapisanie celu jest tym, gdzie utknąłem.

class detc_cta_widget extends WP_Widget { 

// Constructor // 

function detc_cta_widget() { 
    $widget_ops = array('classname' => 'detc_cta_widget', 'description' => 'Displays a Phone CTA'); // Widget Settings 
    $control_ops = array('id_base' => 'detc_cta_widget'); // Widget Control Settings 
    $this->WP_Widget('detc_cta_widget', 'DETC - CTA', $widget_ops, $control_ops); // Create the widget 
} 

// Extract Args // 

    function widget($args, $instance) { 
     extract($args); 
     $title = apply_filters('widget_title', $instance['title']); // the widget title 
     $img_source  = $instance['img_source']; // CTA Image Source URL 
     $img_height  = $instance['img_height']; // CTA Image Height 
     $img_width = $instance['img_width']; // CTA Image Width 
     $link_target = $instance['link_target']; // CTA Link Target 

// Before widget // 

     echo $before_widget; 

// Title of widget // 

     if ($title) { echo $before_title . $title . $after_title; } 

// Widget output // 
     ?> 
     <div> 
     <a href="<?php echo $link_target ?>"><img src="<?php echo $img_source ?>" height="<?php echo $img_height ?>" width="<?php echo $img_width ?>"></a> 
     </div> 
     <?php 

// After widget // 

     echo $after_widget; 

    } 

// Update Settings // 

    function update($new_instance, $old_instance) { 
     $instance['title'] = strip_tags($new_instance['title']); 
     $instance['img_source'] = strip_tags($new_instance['img_source']); 
     $instance['img_height'] = strip_tags($new_instance['img_height']); 
     $instance['img_width'] = strip_tags($new_instance['img_width']); 
     $instance['link_target'] = strip_tags($new_instance['link_target']); 
     return $instance; 
    } 

// Widget Control Panel // 

    function form($instance) { 

    $defaults = array('title' => '','img_source' => 'wp-content/themes/corvius/images/cta_img.png','img_height' => '50','img_width' => '200','link_target' => 'cta.php'); 
    $instance = wp_parse_args((array) $instance, $defaults); ?> 

    <p> 
     <label for="<?php echo $this->get_field_id('title'); ?>">Title:</label> 
     <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>'" type="text" value="<?php echo $instance['title']; ?>" /> 
    </p> 
    <p> 
     <label for="<?php echo $this->get_field_id('img_source'); ?>"><?php _e('CTA Image URL:'); ?></label> 
     <input class="widefat" id="<?php echo $this->get_field_id('img_source'); ?>" name="<?php echo $this->get_field_name('img_source'); ?>" type="text" value="<?php echo $instance['img_source']; ?>" /> 
    </p> 
    <p> 
     <label for="<?php echo $this->get_field_id('img_height'); ?>"><?php _e('CTA Image Height:'); ?></label> 
     <input class="widefat" id="<?php echo $this->get_field_id('img_height'); ?>" name="<?php echo $this->get_field_name('img_height'); ?>" type="text" value="<?php echo $instance['img_height']; ?>" /> 
    </p> 
    <p> 
     <label for="<?php echo $this->get_field_id('img_width'); ?>"><?php _e('CTA Image Width:'); ?></label> 
     <input class="widefat" id="<?php echo $this->get_field_id('img_width'); ?>" name="<?php echo $this->get_field_name('img_width'); ?>" type="text" value="<?php echo $instance['img_width']; ?>" /> 
    </p> 
    <p> 
     <label for="<?php echo $this->get_field_id('link_target'); ?>"><?php _e('CTA Link Target:'); ?></label> 
     <?php wp_dropdown_pages(); ?> 
    </p> 



    <?php } 


} 
// End class detc_cta_widget 

add_action('widgets_init', create_function('', 'return register_widget("detc_cta_widget");')); 
?> 

To co wygląda jak opcje Widget Area:

enter image description here

UPDATE: @Simon Zmieniłem kod Panelu sterowania:

<p> 
     <label for="<?php echo $this->get_field_id('link_target'); ?>"><?php _e('CTA Link Target:'); ?></label> 
     <?php wp_dropdown_pages(array('id' => $this->get_field_id('link_target'),'name' => $this->get_field_name('link_target'))); ?> 
    </p> 

Ale nadal nie udało się zapisać zapisanego wyboru.

Odpowiedz

8

Musisz podać wp_dropdown_pages prawidłowy atrybut nazwy (a id byłoby miłe dla Twojego elementu label). Powinno to zrobić:

wp_dropdown_pages(array(
    'id' => $this->get_field_id('link_target'), 
    'name' => $this->get_field_name('link_target'), 
    'selected' => $instance['link_target'], 
); 
+0

mam zaktualizowane pytanie, może nie zrozumieć swoją odpowiedź? –

+0

Ah, brakowało mi klawisza 'select'. Właściwie twój wybór był zapisywany, po prostu nie jest wyświetlany. Odpowiedź zaktualizowana! – Simon

+0

Świetna robota, "selected" zwraca identyfikator strony, co nie stanowiło problemu, nawet jeśli prześladowałem moje permalinki do używania tytułów stron! Dla tych, którzy chcieliby śledzić, upewnij się, że ustawisz anchor href na "? Page_id = " –

0

Wierzę, że ten kod będzie działał lepiej.

wp_dropdown_pages(array( 'id' => $this->get_field_id('link_target'), 'name' => $this->get_field_name('link_target'), 'selected' => $link_target, ));

Powiązane problemy