2012-02-23 14 views
5

nHe creado un widget para que los usuarios elijan una imagen para mostrar en la barra lateral que vincula a la página que elijan. Me gustaría que esa página se seleccione a través de wp_dropdown_pages.wp_dropdown_pages como una opción en mi widget

Estoy de acuerdo con que los usuarios configuren la URL de la imagen, la altura y el ancho, pero al guardar el destino es donde estoy atascado.

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");')); 
?> 

Esto es lo que se ve el área de opciones de widget como:

enter image description here

ACTUALIZACIÓN: @Simon He cambiado el código Panel de control para:

<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> 

Pero todavía no hay éxito en la selección que se guarda.

Respuesta

8

Necesita dar wp_dropdown_pages un atributo de nombre propio (y id sería bueno para su elemento label). Esto debería hacer:

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

He actualizado la cuestión, tal vez yo no entiendo su respuesta? –

+0

Ah, me perdí la tecla 'seleccionar'. En realidad, su selección se estaba guardando, simplemente no se muestra. Respuesta actualizada! – Simon

+0

¡Gran trabajo, "seleccionado" devuelve la identificación de la página, que no fue un problema incluso si he marcado mis enlaces permanentes para usar títulos de página! Para aquellos a quienes les gustaría seguir, asegúrate de configurar tu ancla href en "? Page_id = " –

0

Creo que este código funcionaría mejor.

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

Cuestiones relacionadas