WPワークス

ダウンロードコンテンツやワードプレスのカスタマイズ方法を配信中。

テーマやプラグインに独自のアップデートチェッカーを適用させる方法

文章を書くのが久しぶりな気がしますが、ブログも更新しようと思います。

テーマやプラグインを配信したい場合、ワードプレスのリポジトリを利用するのが一番だとは思いますが、リポジトリを利用したくない方やリポジトリに適さないテーマやプラグインを扱う方もいらっしゃる筈ですので、少し違った方法で更新通知ができ、他のテーマやプラグインと同じように、管理画面から更新できるようにする方法を紹介していきます。

プラグイン「Package Update Server for WooCommerce」を作成していたのでついでのような感じです。

 

自分だけの「Update Checker」を作成

自分で少しコードを書かなくてはいけませんが、メリットは後に紹介する「Plugin Update Checker」に要する「更新情報用のJSONファイルを用意する必要が無い」ことにあります。

ただ、知っていれば難しい方法ではありませんし、ワードプレスが用意しているフックを利用し、更新リストに差し込む形で通知することができます。

 

テーマの場合

フィルターフック「pre_set_site_transient_update_plugins」「pre_set_transient_update_plugins」を使います。

更新通知用のデータはtransientとして保存されており、上記の2つのフィルターフックにより、通知情報を追加することが可能です。

 

「NEW_PLUGIN_VERSION」など定数で書いている部分はそのプラグインに適するものを使います。

あとは更新通知が管理画面に届くのを待つだけです。

「ダッシュボード」->「更新」のページに更新通知が来るようになれば、あとは一度アップデートが可能か確認しておきましょう。

新しいパッケージのURLがアクセス不可だったり、ダウンロードが失敗して更新できなかったり、間違ったファイルをダウンロードしてしまう場合も考えられます。

 

プラグインの場合

フィルターフック「pre_set_site_transient_update_plugins」「pre_set_transient_update_plugins」を使います。

テーマの場合と同様に更新通知用のデータはtransientとして保存されており、上記の2つのフィルターフックにより、通知情報を追加することが可能です。

挿入するデータが少し異なるだけですが、流れは殆ど同じです。

テーマ同様「NEW_PLUGIN_VERSION」など定数で書いている部分はそのプラグインに適するものを使いましょう。

 

その他の情報

紹介したコードに書かれている定数は、どれもプラグイン内などで自分で設定すべき項目ですので 、オプションなどを使って保存したり、外部へデータをリクエスト・取得して、受け取ったデータを参照しながら、更新通知のデータに挿入していくといいでしょう。

また、プラグインの場合フィルターフック「plugins_api」というものにデータを挿入することで、ポップアップ時に表示される詳細も追加できるなど、詳細な更新通知情報を追記していくことも可能です。

 

独自配信型のデメリット

ワードプレスのリポジトリを利用していないテーマやプラグインの一番のデメリットは、有効化していないと更新通知が届かないことです。

おそらく上記の更新通知を受け取るためのコードは、更新通知を届けたいテーマやプラグインに直接書く場合が殆どだとは思いますが、アクティブでないテーマやプラグインの場合は、更新通知用のコードも読まれませんので、更新通知は一切届かなくなります。

特に理由が無いのであれば、更新通知用のプラグインを作成しておくのがベターというのが個人的な見解です。

 

ダウンロード先が同サイトのRestAPIなどの場合は要注意

個人的に大変でなかなか上手く行かなかった失敗例なのですが、というよりは、僕自身忘れていたせいで凄く時間を無駄に費やしてしまっただけなんですが、上で紹介した挿入データの「package」として設定するURL値は要注意です。

ワードプレスはテーマやプラグインを更新する際、完了するまでそのウェブサイトが「メンテナンスモード」に自動的に移行します。

そうするとダウンロード先としてRestAPIによるファイルダウンロードを設定していた場合、更新中のウェブサイトがメンテナンスモードのためにリクエストしたものを返してくれなくなり、エラーとなりますので、ダウンロード先となるURLは「アクセス可能で正しいURL」を設定するようにしてください。

ええ、最初テスト環境でローカルホスト上の同じサイトのRestAPIにアクセスし、原因が分からず何度も失敗して悩んでおりました。グハッ。。。

 

「Plugin Update Checker」

2つ目の方法としてですが、「Plugin Update Checker」という更新通知用の便利な機能がついたパッケージが配信されていますので、これをそのまま使うのが一番楽だと思います。

名前に「Plugin」という単語が名前に入っていますが、テーマとプラグイン両方に使用できます。

これを利用するのに必要なものは、

の3点のみですので、簡単に始めることができます。

使い方は以下の通りです。

 

1.テーマやプラグインを任意のリポジトリにアップロード

更新させたい新しいバージョンのコンテンツはZIPファイルにして、URLからアクセスできる任意のリポジトリにアップロードします。

自分の利用しているサーバーでも構いませんし、サポートされているサービス(「GitHub」「BitBucket」「GitLab」)と合わせての利用も可能です。

後者の「GitHub」などを利用する場合だと、バージョンなどをリポジトリから読みますので、次のステップで用意するJSONファイルは不要になり、JSONファイルの代わりにリポジトリのURLをパラメータとして使用することになります。

 

2.更新情報用JSONファイルの作成

こちらは任意のリポジトリから配信する場合に必要になるステップです。

アクセス可能なリポジトリに更新情報を記載したJSONファイルをアップロードします。ZIPファイルとは別に用意しておいた方が良いかもしれません。

プラグインとテーマではJSONデータの必要な項目が少し異なりますのでご注意を。ダウンロードしたパッケージ内のサンプルに、テーマとプラグイン用にそれぞれ同じ型のファイルがありますので、他の項目の詳細も参照可能です。

テーマ:

プラグイン:

といった感じで、JSONファイルに

  • 新しいバージョン
  • ダウンロードできるファイルのURL
  • 詳細情報

といった情報を載せることができます。

 

3.テーマやプラグインに「Plugin Update Checker」を実装

次にダウンロードした「Plugin Update Checker」のフォルダを、更新機能を与えたいテーマやプラグインで以下のように書きます。

あとは更新通知に反映されるのを待つだけです。

すぐに反映されていない場合でも、数十秒も待てば更新通知が届いている筈ですが、それでも更新通知が届かない場合は作成したJSONファイルがアクセス可能なリポジトリに配置されていていて、上記のコードに正しいURLが記載されているかをご確認ください。JSONファイルに書かれている「ダウンロードのURL」に問題がある場合でも、その他のデータが正しければ通知はされるはずですから。

 

 

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

メニュ
ホーム
トップへ