Nasıl otomatik WordPress widget'ları etkinleştirmek?

1 Cevap php

Ben bu nihayet vazgeçti.

WordPress 2.8.4 şey geliştiriyorum. Ben kullanmanızı sağlar yeni widget'lar API kolaylığı etkiledi WP_Widget uzanır ve kolayca birden çok örneği var widget oluşturabilirsiniz. Ama bir sorunla karşı karşıya duyuyorum.

Nasıl tema aktivasyon widget'ı otomatik aktive edebilirim? Ben kullanımına denedim:

add_action('sidebars_widgets', array('sidebar-1', array('uc_tagcloud')));

Ama hiçbir başarı ile. Sorun Yeni wordpress API Widget kimlikleri oluşturur ve otomatik kimlik sonuna benzersiz bir id ekler olmasıdır. Ben sadece onu asmak alınamıyor. Ben yukarıdaki çözümü denedim ama kaynak kodu görüntüleyerek gerçek Widget kimliği her zaman vs vs .. uc_tagcloud-2 veya 3 veya 4 görüntüler., Yeni bir örneğe i widget eklemek her zaman.

Ben herhangi bir düşünce takdir ediyorum, ben derin düşündüm ve artık saatlerce internet arama ettik. Yani bu benim son şansım.

Ben temelde kullanıcıların elle sürükleyin ve etkinleştirmek istemiyorum.

Aşağıda benim geliştirdiğim bir örnek widget. I sürükleyin ve ilgili kenar çubuğu koymak eğer iyi çalışır. Nasıl (WP_Widget yeni Widget'lar API) elle sürterek olmadan belirli kenar çubuğuna otomatik olarak aktif hale getirebilirsiniz: Ama benim soru ne .. bilmiyorum

Bu widget kodu:

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

Bu, i love it yeni API çok basit. Ama ben sadece belirli bir kenar çubuğu üzerindeki widget bir örneğini etkinleştirmek nasıl oto alınamıyor. Herhangi bir yardım?

1 Cevap

Temanın functions.php bir blog post mirror as old as this Question that may have a solution, but it is designed to WordPress MU (now Multisite) and should be updated/adapted accordingly. It is a mix of mu-plugin ve ekstra kod var.

Ancak, this Q&A WordPress Yanıtlar ve diğer blog post no mirror yet in, WordPress 3.3 ya da daha üstün için aşağıdaki çalışmalar içerisinde göre. Bu tema aktivasyonu üzerinde çalışır ve WP 3.4.2 ile test ve TwentyEleven en functions.php üzerine uygulanır.

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 );
}