公式ディレクトリに登録していないテーマやプラグインでもバージョンアップ通知をだしたい!

僕の公開しているのWordPressお問い合わせフォームプラグイン「MW WP Form」には拡張プラグインがあって、有料で販売しています(ちなみに、インストールすると、初期設定が入力された状態でフォーム作成画面を開くことができます。さらにレスポンシブなフォームデザインも組み込まれています)。

WordPressの公式プラグインディレクトリに登録しているプラグインの場合は、バージョンアップがあるとお使いのWordPressの管理画面にバージョンアップ通知が出て、ワンクリックでバージョンアップできるのですが、この拡張プラグインは公式ディレクトリに登録していないため、バージョンアップ通知をだすことができません。

なんとかできないかなーと調べていると、なんとGitHubでずばりなライブラリを公開されている方が!

そのままでも良いのですが、長らくバージョンアップされていないようでしたので、フォークさせていただき、クラス化して使いやすいようにしてみました。

ダウンロード

使い方

APIの設定

プラグインやテーマのバージョンアップ通知を出させるには、まずWordPressがバージョンアップ版があるかどうかを調べられるようにしないといけません。GitHubからファイルをダウンロードしたら、まず /api/package.php を編集します。このファイルは最新のテーマやプラグインのバージョン情報を記載しているファイルです。詳細はファイルのコメントをみていただくとして、必ず設定が必要な箇所について説明します。

テーマの場合

下記は、http://your-api-server/api/ に api を設置する例です。最新版のファイルは /api/update/最新版のファイル名.zip(例では theme.zip) として保存してください。

// /api/package.php

// your-theme-slug の部分を配布するテーマのスラッグにあわせて変更
$packages['your-theme-slug'] = array(
    /* 〜 省略 〜 */
    // 2.0 の部分を最新版のバージョンに変更
    '2.0' => array(
        /* 〜 省略 〜 */
        // version も最新版のバージョンに変更
        'version' => '2.0',

        /* 〜 省略 〜 */
        // api を設置するURLに合わせて変更
        // theme.zip の部分は最新版のファイル名に合わせて変更
        'package' => 'http://your-api-server/api/download.php?key=' . md5( 'theme.zip' . mktime( 0, 0, 0, date( 'm' ), date( 'd' ), date( 'Y' ) ) ),

        /* 〜 省略 〜 */
        // file_name も最新版のファイル名に合わせて変更
        'file_name' => 'theme.zip',

プラグインの場合

下記は、http://your-api-server/api/ に api を設置する例です。最新版のファイルは /api/update/最新版のファイル名.zip(例では plugin.zip) として保存してください。

// /api/package.php

// your-plugin-slug の部分を配布するテーマのスラッグにあわせて変更
$packages['your-plugin-slug'] = array(
    /* 〜 省略 〜 */
    // 1.0 の部分を最新版のバージョンに変更
    '1.0' => array(
        /* 〜 省略 〜 */
        // version も最新版のバージョンに変更
        'version' => '1.0',

        /* 〜 省略 〜 */
        // api を設置するURLに合わせて変更
        // plugin.zip の部分は最新版のファイル名に合わせて変更
        'package' => 'http://your-api-server/api/download.php?key=' . md5( 'plugin.zip' . mktime( 0, 0, 0, date( 'm' ), date( 'd' ), date( 'Y' ) ) ),

        /* 〜 省略 〜 */
        // file_name も最新版のファイル名に合わせて変更
        'file_name' => 'plugin.zip',

APIを設置

/api/package.php の編集が完了したら、package.php に記述した URL に合わせてファイルをアップロードしてください。バージョンアップ版を作成した場合は都度この package.php を更新することになります。

テーマにバージョンアップ通知機能を組み込む

バージョンアップ通知機能をつけたいテーマのディレクトリに theme-update.php を入れ、テーマから読み込ませます。functions.php あたりに下記のコードを追加してください。

// functions.php

require_once( './theme-update.php' );
// 引数に api の URL を指定
$ATPU_Theme = new ATPU_Theme( 'http://example.jp/api/' );

バージョンアップ版の確認は、通常、毎回行われるわけではないようなので、テストする場合は下記のコードを追加してみてください。

@set_site_transient( 'update_themes', null );

プラグインにバージョンアップ通知機能を組み込む

バージョンアップ通知機能をつけたいプラグインのディレクトリに plugin-update.php を入れ、プラグインから読み込ませます。

require_once( './plugin-update.php' );
// 引数に api の URL と、スラッグを指定
$ATPU_Plugin = new ATPU_Plugin( 'http://example.jp/api/', 'your-plugin-slug' );

プラグインの場合もバージョンアップ版の確認は毎回行われるわけではないようなので、テストする場合は下記のコードを追加してみてください。

@set_site_transient( 'update_plugins', null );

// plugin-update.php の下記の2行もコメントアウト
//if ( empty( $checked_data->checked ) )
    //return $checked_data; 

注意点

一点、公式ディレクトリに登録しているものとの違いがあり、テーマの場合もプラグインの場合もそれ自体にバージョンアップ版があるか調べるライブラリを組み込むため、有効化している場合にしかバージョンアップが通知されません。。ただ、納品物の場合は有効化しているのが前提だと思いますので、バージョンアップを行っていくようなものの場合はとても重宝すると思います!

  • ブックマーク
  • Feedly

この記事を書いた人

キタジマタカシ

長崎在住、フリーランスのWordPress テーマ / プラグインデベロッパー。 多数のプロダクトをオープンソースで開発・公開しています。現在は WordPress 有料テーマ Snow Monkey を開発・販売しています。