ウィジェットを作成 : WordPress

Pocket

ウィジェット作成のメモ。

» WordPress ウィジェット API – WordPress Codex 日本語版

デフォルトのテキストウィジェットと同じ動作をするサンプル。下記サイトを参考にして作成。
» Build A WordPress 2.8 Widget With The New Widget API – WP Engineer

<?php
/**
 * テキストを表示するウィジェット
 *
 * 勉強のためのウィジェットでデフォルトのテキストウィジェットと同じ動作をする。
 *
 * @author Sawai Hiroshi
 */
class Custom_Text_Widget extends WP_Widget {
    /** constructor */
    function __construct() {
        parent::WP_Widget( false, $name = 'CustomTextWidget' );
    }

    /**
     * prints the widget
     *
     * @param {Array} $args
     * received form WordPress System
     * @param {Object} $instance
     * received from widget form
     */
    function widget( $args, $instance ) {
        extract($args, EXTR_SKIP);
        $title = empty($instance['title']) ? ' ' : apply_filters('widget_title', $instance['title']);
        $text = empty($instance['text']) ? ' ' : apply_filters('widget_text', $instance['text']);
        echo $before_widget;
        if ( isset($title) === true && $title !== '' ) {
            echo $before_title . $title . $after_title;
        }
        if ( isset($text) === true && $text !== '') {
            echo $text;
        }
        echo $after_widget;
    }

    /**
     * save the widget
     */
    function update($new_instance, $old_instance) {
        $instance = $old_instance;
        $instance['title'] = strip_tags($new_instance['title']);
        $instance['text'] = strip_tags($new_instance['text']);
        return $instance;
    }

    /**
     * widget form
     */
    function form($instance) {
        $instance = wp_parse_args( (array) $instance, array( 'title' => '', 'text' => '') );
        $title = strip_tags($instance['title']);
        $text = strip_tags($instance['text']);
?>
        <div><label for="<?php echo $this->get_field_id('title'); ?>">Title: <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_html($title); ?>" /></label></div>
        <div><label for="<?php echo $this->get_field_id('text'); ?>">Text: <textarea class="widefat" id="<?php echo $this->get_field_id('text'); ?>" name="<?php echo $this->get_field_name('text'); ?>"><?php echo esc_html($text); ?></textarea></label></div>
<?php
    }
}
register_widget('Custom_Text_Widget');
apply filters

» 関数リファレンス/apply filters – WordPress Codex 日本語版

<?php apply_filters( $tag, $value ); ?> 

$valueに$tagで指定したフィルターフック名の関数を適用した値を返す。$tagで指定したフィルターフック名の関数がないときは$valueをそのまま返す(falseや例外にはならない)。

WordPressで用意しているフックはwp-include/default-filters.phpで定義されている。

apply_filters('widget_title', $instance['title']); 

default-filters.phpで定義してあるwidget_titleを使う。

apply_filters('widget_text', $instance['text']);

将来フィルターを追加した場合に備える。現在は単に$instance[‘text’]を返す。

メモ:フィルターフックの追加はadd_filter関数でおこなう。

» Function Reference/wp parse args « WordPress Codex

get_field_id/get_field_name

ウィジェットで一意のid属性値とname属性値を取得する。

hogeフィールドの値を得る場合

 $this->get_field_name("hoge"); 

» Function Reference/get field name « WordPress Codex
» php – Is get_field_id() Necessary for Form Filed in WordPress Widget API? – Stack Overflow

コメント

Trackbacks

  1. […] ウィジェットを作成 : WordPress […]

    ピンバックbyPush7用のウィジェット作りに参考にしたところ | 人畜無害のブログ — 2016-09-19 @ 7:07 PM


コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。