2009-08-30 7 views
3

私はこれを最後に諦めました。WordPressウィジェットを自動起動する方法は? (新しいWidgets_API WP_Widgetクラス)

私はWordPress 2.8.4で何かを開発しています。私はあなたがWP_Widgetを拡張し、複数のインスタンスを簡単に持つウィジェットを作成することを可能にする新しいウィジェットAPIの使いやすさに感心しています。しかし、私は問題に直面しています。

テーマのアクティブ化でウィジェットを自動アクティブ化するにはどうすればよいですか?私は使用しようとしました:

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

しかし、成功しません。問題は、新しいWordPress APIがウィジェットIDを作成し、一意のIDを自動的にIDの末尾に追加することです。だから私はちょうどそれのハングアップを取得することはできません。上記の解決策を試しましたが、ソースコードを表示して実際のウィジェットIDを表示すると、常にuc_tagcloud-2または3または4..etcなどが表示されます。ウィジェットを追加するたびに新しいインスタンスが表示されます。

私は何か考えていただければ幸いです。私はそれについて深く考え、数時間インターネットを検索しました。これが私の最後のチャンスです。

私は基本的に、ユーザーが手動でドラッグして有効にしないようにしたいと考えています。

以下は、私が開発したサンプルウィジェットです。私がドラッグして関連するサイドバーに入れるとうまく動作します。しかし、私は私の質問はどのように...知らない:どのように私は(WP_Widget新しいウィジェットAPI)を手動でdragginことなく、特定のサイドバーに自動的にそれを有効にすることができ

これはウィジェットのコードです:

<?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私はそれを愛する。しかし、私はどのように特定のサイドバー上のウィジェットのインスタンスを自動起動するのかを知ることができません。どんな助け?

+0

私はそれはできないと思います。 Wordpress MU WPでは、ネットワーク管理者がプラグインを有効にするように強制しますが、WPでは同じようです。実際に私は自分のWebサイトに入れる前に自分のウィジェットをアクティブにして設定したいと思っています。 –

答えて

1

ソリューションを持っているかもしれないが、それはWordPress MU(今マルチサイト)に設計されており、それに応じて適応/更新する必要があり、この質問と同じくらい古いblog postmirrorがあります。テーマのfunctions.phpにはmu-pluginと余分なコードが混在しています。

しかし、ノーミラーまだ WordPressの回答でthis Q&Aこの他blog postに基づき、ワードプレス3.3または優れたため、次の作品。テーマのアクティブ化で動作し、WP 3.4.2でテストされ、TwentyElevenの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); 
} 
関連する問題