タグ: プラグイン開発

  • Feedly Insight 、稚拙ながら WordPress プラグインをリリースしました。

    Feedly Insight 、稚拙ながら WordPress プラグインをリリースしました。

    構想1日、実装ちまちま2週間ほど。

    ようやく世に出せる程度にはなりましたのでお知らせと共に。

     

    プラグインの名前・公式ページ

    名前は Feedly Insight と名付けました。

     

    Feedly はその名の通り、Feedly の情報をうんたらするから。

    Insight はそれっぽい名前を付け足してみた、という感じです。

    意味合いとしては 洞察どうさつ(力), 眼識がんしき識見しきけん など。

     

    Feedly Insight にできること

    現在βバージョン(保険をかけ)としてリリースしています機能は

    • ダッシュボードに専用ウィジェット追加
    • ウィジェットで現在のサイト Feedly 情報表示
    • Feedly の検索API による検索(他サイトの購読者数を取得可能
    • Feedly の RSS購読者数を毎日データベースに保存し、グラフとして可視化(ある程度日数経たないとおもしろくないです

    ができます。

    現在設定画面を必要としてないため、設定画面はなく、ダッシュボード画面での表示のみです。

    今のところ管理画面でしか動かないため、WordPress が重くなる!

    ってことはないかと。

     

    Feedly Insight 使い方

    こうです
    こうです

     

    必要要件

    • WordPress 3.6 以上 (3.3 ぐらいから動くとは思いますが、3.5以下はセキュリティ上好ましくないため
    • PHP バージョン 5.2 以降

     

    Feedly Insight 作ったきっかけ

    「あったら便利かな~」

    をカタチにしただけですはい。

    以前こんな記事を書いたこともあり。

    あとは自分のパフォーマンスアップ、公開することでの忌憚ない意見が欲しいのもあり。

    ある程度の罵倒は受ける覚悟しt (ry

     

    専用ページもつくったよ

    Feedly Insight 専用ページでは日本語サポート・バグ報告・意見募集・使い方など、順次更新します。

    「こんな機能追加しろ」「このクソコードが!」

    などコメント頂けると、気に入ったものは実装したりするつもりです。

     

    さいごに

    今のところベータと名付けている通り、実装ありきで作ったのでコードがしょうもないです。

    読みづらいところや無駄な処理が。

    例外処理もしないと…。

    便利だと思うんでよかったら使ってみてね!

    Feedly がもっと流行ればいい!

  • get_post_time で投稿の日時によって処理を変えたかった、というプラグイン作成時のメモ【WordPress】

    get_post_time で投稿の日時によって処理を変えたかった、というプラグイン作成時のメモ【WordPress】

    プラグインを作っていましてですね、投稿日時によって処理を変えたいなーと思ったんです。

    if ( 投稿が1時間以内なら ) {
    	処理1
    } elseif ( 投稿が1日以内なら ) {
    	処理2
    } elseif ( 投稿が1週間以内なら ) {
    	処理3
    } else ( 投稿が1週間以前 ) {
    	処理4
    }

    こんな感じで。

    ただまぁわからないのでいつもの Codex に聞いてみますよ。

     

    get_post_time が使えそう

    はてブしてるのがぼくしかいない関数を発見。日本語訳もないや。

    get_post_time( $d, $gmt, $post, $translate ); で使う。

    このタグはループ内で使えて、現在の投稿の時間を返してくれるんだってさ!

    パラメータは

    • $d …String、指定必須。フォーマット変えるには日付フォーマットのところを参照しろ、とのこと。
      デフォルト値は ‘U’ (unix 形式のタイムスタンプ)
    • $gmt …任意。GMTタイムゾーンの時刻を返すには true
    • $post …任意。postIDを指定、デフォルトは global $post
    • $translate …任意。時刻文字列を翻訳するか否か デフォルトは false

    すな。ただ、$translate は真偽値変えても結果変わらなかったんですよねぇ、謎い。

    <?php
    // get_post_time() 出力例
    echo '結果: ' . get_post_time( 'U', false );
    ?>
    
    結果: 13576608201
    

     

    現在時刻の取得はphp関数の time() で

    time() で unix 形式のタイムスタンプで取得できるので、これと get_post_time() を比較すればいけますね。

    <?php
    // time() 出力例
    echo '結果: ' . time();
    ?>
    
    結果: 1371131722

     

    組み合わせて投稿日時と現在日時の開き具合で振り分けてみる

    コードの検証は以前書いた WordPressの関数をちょっと試したいときにWordPress外のPHPから使うための小技 を使って外部phpで書いてみました。

    時刻は秒で出力されるので、あらかじめ変数で時間を用意しておいて、

    <?php
    
    $hour = 60 * 60; // 1分 × 60 = 1時間
    $day  = $hour * 24; // 1時間 × 24 = 1日
    $time = time(); // 現在時刻のタイムスタンプ
    
    $args = array( 'posts_per_page' => 5);
    $posts_array = get_posts( $args );
    
    // 直近の投稿10件でループ回す
    if ( $posts_array ): foreach ( $posts_array as $post ): setup_postdata( $post );
    
    	// unix 形式で投稿タイムスタンプを取得、int型に一応キャストしておく
    	$post_time = (integer) get_post_time( 'U', false );
    
    	// ここで振り分け処理
    	if ( $time - $hour <= $post_time ) {
    		echo '1時間以内';
    	} elseif ( $time - $day <= $post_time ) {
    		echo '1日以内';
    	} elseif ( $time - $day * 7 <= $post_time ) {
    		echo '1週間以内';
    	} else {
    		echo '1週間以上前';
    	}
    	echo '<br />';
    
    endforeach; endif;
    ?>

    これでバッチリですね 、動かしてみると

    振り分け処理されてる!
    振り分け処理されてる!

    とまぁうまくいきました。

     

    ホホまとめ

    プラグインを作るまで get_post_time なんてWordPress関数知りませんでしたし!

    やっぱり作りたいものがあると色々調べて力になってると実感できます。

    もっと美しい書き方がや訂正あれば是非教えて頂きたく。これやってみて!ってのがあればコメントしてみてください。

  • wp_remote_get は file_get_contents よりも応用できてよいですね【WordPress】

    wp_remote_get は file_get_contents よりも応用できてよいですね【WordPress】

    WordPressプラグイン開発で使う機会があったので覚え書き。

     

    たとえば。外部APIを使って取得したいデータがあるとき。

    PHPだと file_get_contents 関数を使うのがベターですかね。こんな風に。(json_decode の説明は割愛)

    <?php
    /**
     * Googleのはてブ数を取得するサンプル file_get_contents
     */
    $url = 'http://google.com';
    $hatena = json_decode( file_get_contents( 'http://api.b.st-hatena.com/entry.count?url=' . $url ) );
    echo $hatena;
    ?>
    で google.com のはてブ数が出力されます。

     

    これで何の問題もないんです。ただ、エラーが出たときの処理が必要になると途端にコードの量が増えてしまいます。

     

    そこで出てくるのが wp_remote_get という WordPress の関数

    とりあえず Codex を見る。

    wp_remote_get( $url, $args ); で使う。HTTP GET メソッドでURLを配列で返す関数。

    • $url …必須、取得したいURLを指定
    • $args …任意、ヘッダー情報やcookieの配列を指定したい場合に指定

    普通に使う分には $args はスルーして良さげ。

     

    wp_remote_get を使ってみる

    前述のサンプルコード file_get_contents を置き換えて取得してみる。

    外部phpからWordPressの関数を呼び出しますよ)

    <?php
    /**
     * Googleのはてブ数を取得するサンプル wp_remote_get
     */
    $url = 'http://google.com';
    $hatena = wp_remote_get( 'http://api.b.st-hatena.com/entry.count?url=' . $url );
    ?>
    <pre><?php print_r($hatena); ?></pre>

    ↑ のコードで返ってくるのがこれ ↓

    Array
    (
        [headers] => Array
            (
                [server] => nginx/0.8.52
                [date] => Wed, 12 Jun 2013 14:09:18 GMT
                [content-type] => text/plain
                [cache-control] => max-age=1800
                [expires] => Wed, 12 Jun 2013 14:25:14 GMT
                [content-length] => 2
                [x-varnish] => 3020424506 3015334553
                [age] => 844
                [via] => 1.1 varnish
                [connection] => close
            )
    
        [body] => 74
        [response] => Array
            (
                [code] => 200
                [message] => OK
            )
    
        [cookies] => Array
            (
            )
    
        [filename] => 
    )

    [body] に $url の内容が格納されて、各々のステータスもそれぞれ配列に入ってる。

    ということでエラー時の振り分けが簡単にできるんですな。

    まとめると、

    <?php
    /**
     * Googleのはてブ数を取得するサンプル wp_remote_get
     */
    $url = 'http://google.com';
    $hatena = wp_remote_get( 'http://api.b.st-hatena.com/entry.count?url=' . $url );
    // エラー振り分け
    if ( ! is_wp_error( $hatena ) && $hatena['response']['code'] === 200 ) {
    	echo $hatena['body']; // はてブ数
    } else {
    	// エラー時の処理
    }
    ?>
    <!-- 配列ごと出力 -->
    <pre><?php print_r( $hatena ); ?></pre>

    っという感じで使える、と。

     

    ホホまとめ

    プラグインを作りながら関数を調べながら…ってやっていると知らないことだらけで下書きが増えまくりです。

    調べてやってみて、さらに記事にする、という手順を踏むと間違いなく身についてるなぁと実感しています。

  • WordPressのプラグインを作ってみる。まずは簡単なプラグインの作り方。

    WordPressのプラグインを作ってみる。まずは簡単なプラグインの作り方。

    以前記事を書いた Transients APIを使って各ソーシャルのカウント数をWordPressデータベース内に一時保存&表示するのよ! をいくつかのサイトで使おうと思い、各々のテーマファイルに同じ記述をしました。

    近頃プラグイン離れをしてまして、自分で書けるものは自分で書こうがテーマなんです。

    プラグインやめる→自分で書く!→あれ…プラグイン化したほうがメンテナンス性よくない?

     

    と思考が至って、WordPressプラグイン作成に着手。

    自分で使う用なのでまずは配布を考えず作ろうと。

     

    プラグインの作りかた

    最近ぼくの中で大ブレイク中のWordPress Codexを見る。

    見たらわかるよね!さて、手順をメモしつつ作りますよ。

     

    1, プラグイン用のファイルを文字コードUTF-8で作成

    wordpressディレクトリ/wp-content/plugins/ 以下に任意の名前でphpファイルを作る。

    phpファイル作成
    phpファイル作成

     

    2, プラグインファイルのヘッダー情報を打ち込む

    プラグインのヘッダー情報は Plugin Name だけあれば動くんだってさ。

    とりあえずこういう形で書き込む。

    <?php
    /*
    Plugin Name: <プラグイン名>
    Plugin URI: <プラグインのURL>
    Description: <プラグインの説明>
    Version: 1.0 <プラグインのバージョン>
    Author: <プラグインの作者名>
    Author URI: <プラグインのの作者URL>
    License: <ライセンス形式>
    */
    ?>

     

    3, プラグインの処理を記述

    プラグインヘッダー情報を書けたら後は処理。

    プラグインならではの関数とかは色々ありますけども、基本的にテーマファイルの functions.php に書いていく感じでちゃちゃっと書いていけばおk。

    …とは言ってもこれだけじゃあなんのことかわからんのでサンプルを作ってみる。

    はてなブックマークの “自分のブログに被ブックマーク数を表示する”

    を使って、抜粋の関数 (the_excerpt) をフックし、抜粋の前にはてブ数を表示するプラグインを作ってみる。

    まずはプラグインヘッダー。

    <?php
    /*
    Plugin Name: First Plugin
    Plugin URI: なし
    Description: 抜粋の後にはてブ数を表示させるプラグインだよ!
    Version: 1.0
    Author: hayashikejinan
    Author URI: http://hayashikejinan.com
    License: GPL2
    */
    ?>

    次に処理部分。

    <?php
    /**
     * the_excerpt をフックして抜粋の前にはてブ数を表示。
     *
     * @param $except
     *
     * @return string
     */
    function hatena( $except ) {
    	// 抜粋ごとの記事リンクではてブ数をうんちゃら
    	return '
    	<a class="hatena-users" rel="nofollow" target="_blank" href="http://api.b.st-hatena.com/entry/' . get_permalink() . '">
    	<img border="0" src="http://api.b.st-hatena.com/entry/image/' . get_permalink() . '" alt=""/>
    	</a>' . $except;// 抜粋の前に入れる
    }
    
    // the_excerpt アクションフック
    add_action( 'the_excerpt', 'hatena' );
    
    ?>

    これだけで( `д´)b オッケー!

     

    4, 有効化して確認してみようか

    作ったサンプルプラグインをブログにインストールし、プラグインメニューで有効化。

    表示はこんな感じ。有効化を押そうね!
    表示はこんな感じ。有効化を押そうね!

     

    有効化前後のビフォーアフターで比べてみましょう。

    ビフォーねこれ。
    ビフォーねこれ。

     

    アフター。はてブ数がちゃんと抜粋の前に出たよ!やったね!
    アフター。はてブ数がちゃんと抜粋の前に出たよ!やったね!

     

    とまぁこんな感じであっさりできました。

     

    ホホまとめ

    「んー…この処理は色んなところで使えそうだのう」みたいなことがあるのでプラグインを作り始めました。

    とっかかりはまぁなんでもいいんですけども、最大の目標である脱プラグインをするためにプラグインを作るというわけのわからないことに。

    自分で使うものだったら設定画面なんていらないから楽ちんですね。

    ちょいちょい作りたいプラグイン進めていこうと思ってます。

    あ、今回作ったサンプルのプラグインしょうもないですけど一応置いときますねー。