ツンデレ本管理プロジェクトwordpressのwidgetを作った話

よし、今回のプロジェクトの一番大きな改修部分 wordpressのwidgetを作りました!

何かというと、右にあるものです →

これですね。

ソースはこんな感じです!


/**
 *  ツンデレ本一覧ウィジェット
 */
class TsundereBookWidget extends WP_Widget{

    //コンストラクタでウィジェットを登録
    function __construct(){
        parent::__construct(
            'tsundere_book',
            'ツンデレ本一覧',
            array('description' => 'ツンデレ本を表示するウィジェットです')
        );
    }

    //ウィジェットの表示
    public function widget($args, $instance){
        echo $args['before_widget'];

        //-- ここにウィジェットの内容 --//
        echo $args['before_title'] . '<span style=>ツンデレ本</span>' . $args['after_title'];
        echo makeTsundereForm();
        echo '<div style="text-align: center; background-color: #eeeeee;"><a href="https://www.mmpp.org/tsundere/" style="font-weight:bold" target="_blank">全ツンデレ本一覧<外部リンク></a></div>';
        echo $args['after_widget'];
    }
}
/**
 * ツンデレ本一覧本文を生成します
 * @return string htmlテキスト
 */
function makeTsundereForm(){

    // ツンデレ本の提供JSONを取得します
    $json = connectTsundereJson('https://www.mmpp.org/tsundere/api/reading/list');

    // フォームの文字列
    $formValue = '';

    // 読書中シーンのループ
    foreach ( $json['readings'] as $reading){
        $formValue .= '<div style="margin:0px">';

        // シーンタイトルを生成します
        $formValue .= sprintf('<div style="text-align: center; background-color: #ffffff; border-bottom:dashed #cccccc; font-weight:bold;margin-bottom: 0.5em">%s</div>',$reading['scene']['title'] );

        // amazonからへのURLと表紙画像を表示します
        $book = $reading['book'];
        $formValue .= sprintf("<a href='%s' target='_blank'><img src='%s' alt=''></a>" , $book['url'], $book['img_src'] );
        $formValue .= sprintf("<img style='!important; margin: 0px !important; text-align: center;' src='%s' alt='' width='1' height='1' />", $book['img_src2'] );

        $formValue .= '</div>';

    }
    return $formValue;
}

/**
 * 読書中情報を取得します
 * @param $url string 読書中URL
 * @return mixed
 */
function connectTsundereJson($url){
    return json_decode(file_get_contents($url),true);
}

/**
 * ツンデレ本一覧をウィジェットに追加します
 */
add_action(
    'widgets_init',
    function(){
        register_widget('TsundereBookWidget'); //ウィジェットのクラス名を記述
    }
);

よくわかりませんが、themaのfunction.phpに追記しました…
themaを上げると飛びますので注意です

難しくはないですが、ツンデレ本管理サイトからjsonを引っ張ってきて表示します

現在のところ、そんな感じです
ツンデレ本プロジェクトの立ち上げしか書いていないやとか思っていたり…