サポート » プラグイン » 自動更新に対応したプラグインの作り方について

  • 解決済 tokkonopapa

    (@tokkonopapa)


    プラグインの公式ディレクトリに公開しているプラグインで、バージョンアップ時のオプションテーブルの更新方法について、質問いたします。

    【背景】
    オプションテーブルにはデータのバージョン番号が入れ込んでり、バージョンアップ時に同番号を調べ、更新が必要かどうか判定できる仕様にしてあります。

    【自サーバーで観測された事】
    公式ディレクトリにバージョンアップ版をアップロード後、旧バージョンをインストールした以下の環境で観測しました。

    ・WordPress 4.0
    ・サーバー:Mac上のMAMP
    ・PHP 5.4.4

    更新処理自体は、activate() に書いてあるのですが、てっきり自動更新時には、1. ダウンロード、2. deactivate()、3. 展開・更新、4. activate() のように、(「再有効化に成功しました」みたいなメッセージにより)activate() が呼び出されると思っていましたが、どうやら違ったみたいです。

    ちなみに、自動更新後にマニュアルで deactivate()activate() すると、ちゃんと更新されました。

    【質問】
    ・自動更新後に実行されるアクションフックはありませんでしょうか?(upgrader_process_complete がそう?)
    ・このような処理は、activate() ではなく、(コンストラクタなど)実行時の処理に書くべきなのでしょうか?(毎回のチェックはあまりやりたくはありません)
    ・プラグイン(やテーマ)の自動更新をテストする方法をご存じないでしょうか?

    以上、ご教示、よろしくお願いします。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • すみません、意味不明な事を書いていたので、修正します(汗;)

    先に書いた activate というのは、プラグインが有効化されたときに実行する関数を登録する、以下の様なコードにおける my_activate() の事を指していました。

    register_activation_hook( __FILE__, 'my_activate' );
    function my_activate() {
        ...;
    }

    また「自動更新」は、ダッシュボード上の「WordPress の更新」(コアやプラグイン、テーマの更新)画面で、「プラグインを更新」ボタンによる更新の事で、FTP 等による手作業の更新ではないという意味で「自動」と書きました。

    以上、引き続き、ご教示いただければ幸いです。

    モデレーター Daisuke Takahashi

    (@extendwings)

    http://codex.wordpress.org/Creating_Tables_with_Plugins#Adding_an_Upgrade_Function によると、3.1以降、activation hookはアップグレード時にコールされないことが明記されています。
    なので、サンプルのようにplugins_loaded hookを使うのがいいのではないでしょうか。

    「毎回のチェックはあまりやりたくはありません」という気持ちは自分もわかります。
    register_upgrade_hook( __FILE__, 'upgrade_callback');みたいなことができるようになれば一番でしょうね

    @daisuke Takahashiさん、情報ありがとうございます。

    なるほど、3.1で廃止になっていたのですね。

    関連する情報ですが、Plugin activation hooks no longer fire for updates に、なぜ廃止にしたのか、3つの不整合について理由が述べられていました。

    今回のプラグインの場合、ご紹介いただいた plugins_loaded フックでクラスのインスタンスを生成しているので、同じタイミングでチェックするということですね。

    確かに手作業でのアップデートの場合も、必ずしも無効→更新→有効という手順を踏んでくれるとは限らないので、現時点で一番確実な方法だと思います。

    register_upgrade_hook() はぜひ欲しいですね!

    ありがとうございました。(こっそり upgrader_process_complete も試してみようかと思案中です 😉 )

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「自動更新に対応したプラグインの作り方について」には新たに返信することはできません。