Как автоматически активировать виджеты WordPress? (Новый класс WP_Widget Widgets_API) - PullRequest
3 голосов
/ 30 августа 2009

Я окончательно отказался от этого.

Я что-то разрабатываю на 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 мне нравится. Но я просто не могу понять, как автоматически активировать экземпляр виджета на определенной боковой панели. Любая помощь?

1 Ответ

1 голос
/ 15 ноября 2012

Есть сообщение в блоге mirror , столь же старое, как и этот Вопрос, которое может иметь решение, но оно разработано для WordPress MU (теперь Multisite) и должнобыть обновлены / адаптированы соответственно.Это смесь mu-plugin и дополнительного кода в теме functions.php.

Но, основываясь на этом Q & A в Ответах WordPress и этом другом сообщении в блоге пока нет зеркала , следующее работает для WordPress 3.3 или выше.Он работает при активации темы и протестирован с WP 3.4.2 и применяется к TwentyEleven's functions.php.

add_action( 'after_switch_theme', 'so_1353147_activate_theme', 10 , 2 );

function so_1353147_activate_theme( $oldname, $oldtheme = false ) 
{
    $sidebar_id = 'sidebar-5';
    $sidebars_widgets = get_option( 'sidebars_widgets' );
    $id = count( $sidebars_widgets ) + 1;
    $sidebars_widgets[$sidebar_id] = array( "text-" . $id );

    $ops = get_option( 'widget_text' );
    $ops[$id] = array(
        'title' => 'Automatic Widget',
        'text' => 'Lorem ipsum lorem', 
    );
    update_option( 'widget_text', $ops ); 
    update_option( 'sidebars_widgets', $sidebars_widgets );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...