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:
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.
mam zaktualizowane pytanie, może nie zrozumieć swoją odpowiedź? –
Ah, brakowało mi klawisza 'select'. Właściwie twój wybór był zapisywany, po prostu nie jest wyświetlany. Odpowiedź zaktualizowana! – Simon
Ś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 = Php echo $ link_target?>" –