2009-08-30 6 views
3

J'ai finalement abandonné.Comment activer automatiquement les widgets WordPress? (Nouvelle classe Widgets_API WP_Widget)

Je développe quelque chose sur WordPress 2.8.4. Je suis impressionné par l'aisance de l'API des nouveaux widgets qui vous permet d'utiliser extend WP_Widget et de créer facilement des widgets ayant plusieurs instances. Mais je suis confronté à un problème. Comment puis-je activer automatiquement le widget lors de l'activation d'un thème?

J'ai essayé d'utiliser:

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

Mais sans succès. le problème est que l'API New wordpress crée des identifiants de widget et ajoute automatiquement un identifiant unique à la fin de l'ID. Donc je ne peux pas comprendre. J'ai essayé la solution ci-dessus mais l'ID de widget réel en affichant le code source affiche toujours uc_tagcloud-2 ou 3 ou 4. etc .. une nouvelle instance chaque fois que j'ajoute le widget.

J'apprécierais n'importe quelle pensée, j'ai profondément pensé à cela et ai cherché sur Internet pendant des heures maintenant. Donc c'est ma dernière chance.

Je ne veux pas que les utilisateurs les traînent et les activent manuellement.

Voici un exemple de widget que j'ai développé. Cela fonctionne bien si je fais glisser et le mettre dans la barre latérale pertinente. Mais je ne sais pas comment .. ma question est: comment puis-je activer automatiquement dans la barre latérale spécifique sans draggin manuellement (WP_Widget nouvelle API Widgets)

Ceci est du code de widget:

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

Il est très simple, la nouvelle API je l'aime. Mais je ne peux pas obtenir comment activer automatiquement une instance du widget sur une barre latérale spécifique. De l'aide?

+0

Je pense que ce n'est pas possible. Dans Wordpress MU WP force l'administrateur réseau pour activer le plugin, semble être le même sur WP. En fait je préfère activer et configurer mon widget avant de le mettre sur mon site. –

Répondre

1

Il y a un blog postmirror aussi ancienne que cette question qui peut avoir une solution, mais il est conçu pour WordPress MU (maintenant multisite) et devrait être mis à jour/adaptés en conséquence. C'est un mélange de mu-plugin et de code supplémentaire dans le thème functions.php.

Mais basé à this Q&A dans WordPress réponses et cette autre blog postpas encore miroir, les travaux suivants pour WordPress 3.3 ou supérieur. Il fonctionne sur activation de thème et est testé avec WP 3.4.2 et appliqué sur functions.php de TwentyEleven.

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