概要
register_widget
関数は、WordPressのウィジェットを登録するための関数です。この関数は、カスタムウィジェットを作成する際に使用され、特に以下のような機能を実装する際によく使われます:
- サイドバーにカスタムコンテンツを表示する
- ユーザーインターフェイスを提供するためのカスタム設定を実装する
- フィードやニュース、イベント情報をリアルタイムで表示する
- ソーシャルメディアサイドバーツールを作成する
- ウェブサイトの訪問者に役立つ情報を提供するデータを表示する
- RPC(リモートプロシージャコール)を利用した統合機能を持たせる
- アフィリエイトリンクやバナー広告を管理するウィジェットを作成する
- 動的に変化するコンテンツをウィジェットエリアに反映する
この関数を使用することで、WordPressサイトに独自のウィジェットを追加し、機能性を高めることが可能です。
構文
register_widget( 'My_Custom_Widget' );
パラメータ
$widget_class
(string) : 登録するウィジェットクラスの名前。
戻り値
この関数は特に戻り値を持たず、ウィジェットの登録が成功したことを前提としています。
関連する関数
使用可能なバージョン
この関数はWordPress 2.8以降で使用可能です。
コアファイルのパス
wp-includes/widgets.php
この関数のアクションでの使用可能性
アクション | 使用例 |
---|---|
mu_plugin_loaded | |
registered_post_type | |
plugins_loaded | 〇 |
wp_roles_init | |
setup_theme | |
after_setup_theme | |
set_current_user | |
init | |
register_sidebar | |
wp_loaded | 〇 |
send_headers | |
parse_query | |
pre_get_posts | |
wp | |
template_redirect | |
get_header | |
wp_head |
サンプルコード
サンプル 1: シンプルなテキストウィジェット
class My_Simple_Widget extends WP_Widget {
function __construct() {
parent::__construct('my_simple_widget', 'My Simple Widget');
}
public function widget($args, $instance) {
echo $args['before_widget'];
echo '<p>Hello, World!</p>';
echo $args['after_widget'];
}
}
function register_my_simple_widget() {
register_widget('My_Simple_Widget');
}
add_action('widgets_init', 'register_my_simple_widget');
このコードは、サイドバーに「Hello, World!」というメッセージを表示するシンプルなウィジェットを作成します。
サンプル 2: 入力フィールドを持つウィジェット
class My_Text_Widget extends WP_Widget {
function __construct() {
parent::__construct('my_text_widget', 'My Text Widget');
}
public function widget($args, $instance) {
echo $args['before_widget'];
$title = apply_filters('widget_title', $instance['title']);
echo $args['before_title'] . $title . $args['after_title'];
echo '<p>' . esc_html($instance['text']) . '</p>';
echo $args['after_widget'];
}
public function form($instance) {
$title = !empty($instance['title']) ? $instance['title'] : '';
$text = !empty($instance['text']) ? $instance['text'] : '';
?>
<p>
<label for="<?php echo esc_attr($this->get_field_id('title')); ?>"><?php _e('Title:'); ?></label>
<input class="widefat" id="<?php echo esc_attr($this->get_field_id('title')); ?>" name="<?php echo esc_attr($this->get_field_name('title')); ?>" type="text" value="<?php echo esc_attr($title); ?>">
</p>
<p>
<label for="<?php echo esc_attr($this->get_field_id('text')); ?>"><?php _e('Text:'); ?></label>
<textarea class="widefat" id="<?php echo esc_attr($this->get_field_id('text')); ?>" name="<?php echo esc_attr($this->get_field_name('text')); ?>"><?php echo esc_textarea($text); ?></textarea>
</p>
<?php
}
public function update($new_instance, $old_instance) {
$instance = array();
$instance['title'] = (!empty($new_instance['title'])) ? strip_tags($new_instance['title']) : '';
$instance['text'] = (!empty($new_instance['text'])) ? strip_tags($new_instance['text']) : '';
return $instance;
}
}
function register_my_text_widget() {
register_widget('My_Text_Widget');
}
add_action('widgets_init', 'register_my_text_widget');
このコードは、ユーザーがタイトルとテキストを入力できるウィジェットを作成します。
サンプル 3: カスタムリンクウィジェット
class My_Link_Widget extends WP_Widget {
function __construct() {
parent::__construct('my_link_widget', 'My Link Widget');
}
public function widget($args, $instance) {
echo $args['before_widget'];
$title = apply_filters('widget_title', $instance['title']);
$link = esc_url($instance['link']);
echo $args['before_title'] . $title . $args['after_title'];
echo '<a href="' . $link . '">Visit our site</a>';
echo $args['after_widget'];
}
public function form($instance) {
$title = !empty($instance['title']) ? $instance['title'] : '';
$link = !empty($instance['link']) ? $instance['link'] : '';
?>
<p>
<label for="<?php echo esc_attr($this->get_field_id('title')); ?>"><?php _e('Title:'); ?></label>
<input class="widefat" id="<?php echo esc_attr($this->get_field_id('title')); ?>" name="<?php echo esc_attr($this->get_field_name('title')); ?>" type="text" value="<?php echo esc_attr($title); ?>">
</p>
<p>
<label for="<?php echo esc_attr($this->get_field_id('link')); ?>"><?php _e('Link:'); ?></label>
<input class="widefat" id="<?php echo esc_attr($this->get_field_id('link')); ?>" name="<?php echo esc_attr($this->get_field_name('link')); ?>" type="text" value="<?php echo esc_attr($link); ?>">
</p>
<?php
}
public function update($new_instance, $old_instance) {
$instance = array();
$instance['title'] = (!empty($new_instance['title'])) ? strip_tags($new_instance['title']) : '';
$instance['link'] = (!empty($new_instance['link'])) ? strip_tags($new_instance['link']) : '';
return $instance;
}
}
function register_my_link_widget() {
register_widget('My_Link_Widget');
}
add_action('widgets_init', 'register_my_link_widget');
このコードは、タイトルとリンクを設定できるウィジェットを作成し、「Visit our site」というリンクを表示します。
サンプル 4: イメージウィジェット
class My_Image_Widget extends WP_Widget {
function __construct() {
parent::__construct('my_image_widget', 'My Image Widget');
}
public function widget($args, $instance) {
echo $args['before_widget'];
$title = apply_filters('widget_title', $instance['title']);
$image = esc_url($instance['image']);
echo $args['before_title'] . $title . $args['after_title'];
echo '<img src="' . $image . '" alt="' . $title . '">';
echo $args['after_widget'];
}
public function form($instance) {
$title = !empty($instance['title']) ? $instance['title'] : '';
$image = !empty($instance['image']) ? $instance['image'] : '';
?>
<p>
<label for="<?php echo esc_attr($this->get_field_id('title')); ?>"><?php _e('Title:'); ?></label>
<input class="widefat" id="<?php echo esc_attr($this->get_field_id('title')); ?>" name="<?php echo esc_attr($this->get_field_name('title')); ?>" type="text" value="<?php echo esc_attr($title); ?>">
</p>
<p>
<label for="<?php echo esc_attr($this->get_field_id('image')); ?>"><?php _e('Image URL:'); ?></label>
<input class="widefat" id="<?php echo esc_attr($this->get_field_id('image')); ?>" name="<?php echo esc_attr($this->get_field_name('image')); ?>" type="text" value="<?php echo esc_attr($image); ?>">
</p>
<?php
}
public function update($new_instance, $old_instance) {
$instance = array();
$instance['title'] = (!empty($new_instance['title'])) ? strip_tags($new_instance['title']) : '';
$instance['image'] = (!empty($new_instance['image'])) ? strip_tags($new_instance['image']) : '';
return $instance;
}
}
function register_my_image_widget() {
register_widget('My_Image_Widget');
}
add_action('widgets_init', 'register_my_image_widget');
このコードは、ユーザーが指定した画像を表示するウィジェットを作成します。
サンプル 5: 最近の投稿ウィジェット
class My_Recent_Posts_Widget extends WP_Widget {
function __construct() {
parent::__construct('my_recent_posts_widget', 'My Recent Posts Widget');
}
public function widget($args, $instance) {
echo $args['before_widget'];
$title = apply_filters('widget_title', $instance['title']);
echo $args['before_title'] . $title . $args['after_title'];
$recent_posts = wp_get_recent_posts(array('numberposts' => 5));
echo '<ul>';
foreach ($recent_posts as $post) {
echo '<li><a href="' . get_permalink($post['ID']) . '">' . esc_html($post['post_title']) . '</a></li>';
}
echo '</ul>';
echo $args['after_widget'];
}
public function form($instance) {
$title = !empty($instance['title']) ? $instance['title'] : '';
?>
<p>
<label for="<?php echo esc_attr($this->get_field_id('title')); ?>"><?php _e('Title:'); ?></label>
<input class="widefat" id="<?php echo esc_attr($this->get_field_id('title')); ?>" name="<?php echo esc_attr($this->get_field_name('title')); ?>" type="text" value="<?php echo esc_attr($title); ?>">
</p>
<?php
}
public function update($new_instance, $old_instance) {
$instance = array();
$instance['title'] = (!empty($new_instance['title'])) ? strip_tags($new_instance['title']) : '';
return $instance;
}
}
function register_my_recent_posts_widget() {
register_widget('My_Recent_Posts_Widget');
}
add_action('widgets_init', 'register_my_recent_posts_widget');
このコードは、サイトの最近の投稿をリスト表示するウィジェットを作成します。