【WordPress】ウィジェットを自作!オリジナルウィジェットの作り方

完成イメージ

今回は下のような「タイトル」「テキスト」「チェックボックス」の3つの入力項目のあるウィジェットを作ってみたいと思います。

functions.phpに記述するコード

<?php
class Original extends WP_Widget {
	function __construct() { // 基本的な設定
		parent::__construct(
			'original', // ウィジェットのID
			'ウィジェット名',
			array('description' => 'ウィジェットの説明')
		);
	}

	function form($instance) { // 管理画面で表示する内容
		if (!$instance['title']) $instance['title'] = '';
		if (!$instance['text']) $instance['text'] = '';
		$check = $instance['check'] ? 'checked="checked"' : ''; ?>
		<p>
			<label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('タイトル:'); ?></label>
			<input type="text" class="widefat" id="<?php echo $this->get_field_id('title'); ?>"
			name="<?php echo $this->get_field_name('title'); ?>"
			value="<?php echo esc_attr($instance['title']); ?>">
		</p>
		<p>
			<label for="<?php echo $this->get_field_id('text'); ?>"><?php _e('テキスト:'); ?></label>
			<textarea class="widefat" id="<?php echo $this->get_field_id('text'); ?>" rows="5"
			name="<?php echo $this->get_field_name('text'); ?>"><?php echo esc_attr($instance['text']); ?></textarea>
		</p>
		<p>
			<input type="checkbox" <?php echo $check; ?> id="<?php echo $this->get_field_id('check'); ?>"
			name="<?php echo $this->get_field_name('check'); ?>">
			<label for="<?php echo $this->get_field_id('check'); ?>"><?php _e('チェックボックス'); ?></label>
		</p><?php
	}

	function update($new_instance, $old_instance) { // 管理画面で入力された値の更新
		$instance = $old_instance;
		$instance['title'] = strip_tags($new_instance['title']);
		$instance['text'] = strip_tags($new_instance['text']);
		$instance['check'] = $new_instance['check'] ? 1 : 0;
		return $instance;
	}

	function widget($args, $instance) { // 実際に出力する内容
		extract($args);
		if ($instance['title']) $title = apply_filters('widget_title', $instance['title']);
		if ($instance['text']) $text = apply_filters('widget_title', $instance['text']);

		echo $before_widget; // register_sidebar()でbefore_widgetの値を登録していた場合

		if ($instance['check']) { // チェックがある場合に ?>
			<h2><?php echo $title; ?></h2><?php // タイトルを表示 ?>
			<p><?php echo $text; ?></p><?php // テキストを表示
		}

		echo $after_widget; // register_sidebar()でafter_widgetの値を登録していた場合
	}
}
register_widget('Original'); // 'Original'の値は最初の行のclass Originalと対応

あとは’title’とか’check’の部分を変えていくらでも項目を追加できます。

参考にしてみてください!