Я окончательно отказался от этого.
Я что-то разрабатываю на WordPress 2.8.4. Я впечатлен простотой нового API виджетов, который позволяет вам использовать extends WP_Widget и легко создавать виджеты с несколькими экземплярами. Но я столкнулся с проблемой.
Как я могу автоматически активировать виджет при активации темы? Я пытался использовать:
add_action('sidebars_widgets', array('sidebar-1', array('uc_tagcloud')));
Но безуспешно. проблема в том, что New wordpress API создает идентификаторы виджетов и автоматически добавляет уникальный идентификатор в конец идентификатора. Так что я просто не могу освоить это. Я пробовал вышеуказанное решение, но фактический идентификатор виджета при просмотре исходного кода всегда отображает uc_tagcloud-2 или 3 или 4..etc и т. Д. Каждый раз, когда я добавляю виджет, появляется новый экземпляр.
Буду признателен за любую мысль, я глубоко задумался над этим и искал в Интернете часами. Так что это мой последний шанс.
Я не хочу, чтобы пользователи перетаскивали их и включали вручную.
Ниже приведен пример виджета, который я разработал. Это работает нормально, если я перетащить и положить его в соответствующую боковую панель. Но я не знаю, как ... у меня вопрос: как я могу автоматически активировать его на определенную боковую панель, не перетаскивая ее вручную (WP_Widget new Widgets API)
Это код виджета:
<?php
/**********************************************************************
Widget: Tag Cloud List
**********************************************************************/
class uc_tagcloud extends WP_Widget {
// Constructor
function uc_tagcloud() {
$widget_ops = array('description' => __('A list of your blog tags for your sidebar','ucms'));
$this->WP_Widget('uc_tagcloud', __('ultimaCMS - Tag Cloud','ucms'), $widget_ops);
}
// Display Widget
function widget($args, $instance) {
extract($args);
$title = esc_attr($instance['title']);
$num = intval($instance['num']);
echo $before_widget.$before_title.$title.$after_title;
// Display widget content
?>
<?php wp_tag_cloud('smallest=9&largest=22&number='.$num); ?>
<?php
echo $after_widget;
}
// When Widget Control Form Is Posted
function update($new_instance, $old_instance) {
if (!isset($new_instance['submit'])) {
return false;
}
$instance = $old_instance;
$instance['title'] = strip_tags($new_instance['title']);
$instance['num'] = intval($new_instance['num']);
return $instance;
}
// DIsplay Widget Control Form
function form($instance) {
global $wpdb;
$instance = wp_parse_args((array) $instance, array('title' => __('Tag Cloud','ucms'), 'num' => 100));
$title = esc_attr($instance['title']);
$num = intval($instance['num']);
?>
<p>
<label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:','ucms'); ?></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 $title; ?>" />
</p>
<p>
<label for="<?php echo $this->get_field_id('num'); ?>"><?php _e('Number of tags:','ucms'); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id('num'); ?>" name="<?php echo $this->get_field_name('num'); ?>" type="text" value="<?php echo $num; ?>" />
<br /><small>Enter 0 to display all tags</small>
</p>
<input type="hidden" id="<?php echo $this->get_field_id('submit'); ?>" name="<?php echo $this->get_field_name('submit'); ?>" value="1" />
<?php
}
}
### Initiate widget
add_action('widgets_init', 'uc_tagcloud_init');
function uc_tagcloud_init() {
register_widget('uc_tagcloud');
}
?>
Это очень просто, новый API мне нравится. Но я просто не могу понять, как автоматически активировать экземпляр виджета на определенной боковой панели. Любая помощь?