お手軽にウィジェット化

サイドバーで使うようなプラグインで、ウィジェットがなく関数のみが提供されているものは、自分でウィジェット化しておくと、管理画面から取り外し出来るので便利です。

関数をラップするだけだったら、ほとんど Widgets API « WordPress Codex のサンプルそのままで、ウィジェット名とウィジェットの出力部分を変更するだけです。

ということで、関数だけでウィジェットがない Compact Archives プラグインをウィジェットにしてみます。コード中のcompact_archive('numeric'); は、Compact Archives 提供のの関数です。

テーマの functions.php

class MyCompactArchive extends WP_Widget {
    function MyCompactArchive() {
        parent::WP_Widget(false, $name = 'MyCompactArchive');
    }
    function form($instance) {
        $title = esc_attr($instance['title']);
        echo '<p>';
        echo '<label for="' . $this->get_field_id('title') . '">' . _e('Title:');
        echo '<input class="widefat" id="' . $this->get_field_id('title') . '" name="' . $this->get_field_name('title') . '" type="text" value="' . $title . '" /></label></p>';
    }
    function update($new_instance, $old_instance) {
        $instance = $old_instance;
        $instance['title'] = strip_tags($new_instance['title']);
        return $instance;
    }
    function widget($args, $instance) {
        extract( $args );
        $title = apply_filters('widget_title', $instance['title']);
        echo $before_widget;
        if ($title) {
            echo $before_title . $title . $after_title;
        }
        echo '<ul class="compact-archives-widget">';
        compact_archive('numeric');
        echo '</ul>';
        echo $after_widget;
    }
}
add_action('widgets_init', create_function('', 'return register_widget("MyCompactArchive");'));