web-dev-qa-db-ja.com

プラグインの自動アップデート - ワードプレスリポジトリではホストされていません

私はおそらく将来更新されるであろうプラグインをコーディングしています、そして私はワードプレスの自動更新メカニズムを利用したいです。

このチュートリアル :に従った。

すべてが私にはかなり簡単に思えましたが、何らかの理由で、何もうまくいきません。 pre_set_site_transient_update_pluginsフィルタにフックされた関数は決して呼び出されません。

私は一歩一歩進めようとし、そのフックに "Hello"とログ行を追加しました。更新チェックを強制しようとしても、単に呼び出されません。

それについて何かキャッチはありますか?ところで、私はマルチサイトインストールでそれを試しています。

任意の助けは大歓迎です。

アルナルド

更新:私は呼び出されるpre_set_site_transient_update_pluginsにフックされた関数を得ました。不思議なことに、私がチェック機能を持つオブジェクトのコンストラクタの内側でフックをするとうまくいきますが、そうでなければうまくいきません。

例(これは動作します):

class XYZ {
    public function __construct() {
        add_filter('pre_set_site_transient_update_plugins', array($this, 'check_update'));
    }

    public function check_update($transient) {
        // logic here
    }
}

ただし、メインのプラグインファイルでこれを実行するだけではうまくいきません。

add_filter('pre_set_site_transient_update_plugins', array('XYZ', 'check_update')); 

まず最初に、2つのシナリオの違いは何かを理解したいと思います。それ以外に、私はしなければなりませんでした

set_site_transient('update_plugins', null);

フックを強制的に呼び出すには、そうでなければ、通常のワードプレスの更新チェックサイクルを待たなければならないと思います。そして今、別の問題が浮上しています:check_update()関数に渡される$transient変数は常にnullです!それはset_site_transient()命令が原因ですか?もしそうなら、私の最新の変更をテストすることができるように数時間苦しむことなく解決策全体をどうやってチェックすることができますか?

ありがとう、アルナルド

更新2:@カイザー、動作は静的メソッドを使用しても、私が説明したとおりです。私はすでにそれを試みました。

5
arnaldo2204

あなたは実際にそこにいくつかの質問を持っています、それで私はそれらに一つずつ答えていきます:

ただし、メインのプラグインファイルでこれを実行するだけではうまくいきません。

add_filter('pre_set_site_transient_update_plugins', array('XYZ', 'check_update'));

まず最初に、2つのシナリオの違いは何かを理解したいと思います。

クラスのインスタンスではなく静的にメソッドを呼び出しているため、これは失敗します。メソッドがインスタンスで呼び出されていないため、クラスプロパティは設定されていません。たとえば、check_update()$this->current_versionを使おうとすると、nullが返されます。このため、関数は利用可能な更新がないと見なします。

それ以外に、私はしなければなりませんでした

set_site_transient('update_plugins', null);

フックを強制的に呼び出すには、そうでなければ、通常のワードプレスの更新チェックサイクルを待たなければならないと思います。

はい。

そして今、別の問題が表面化しました:check_update()関数に渡される$transient変数は常にnullです!それはset_site_transient()命令が原因ですか?

はい、トランジェントをnullに設定しています。ですから、何らかの理由で失敗しない限り、それ以降はnull以外になるとは思わないでください。

[H]最新の変更をテストできるように、何時間も苦労することなくソリューション全体をチェックできますか。

テストするには、代わりにget_site_transient_update_pluginsにフックするように変更してください。トランジェントが取得されるたびに呼び出されます。ただし、静的変数などを設定することをお勧めします。そのため、ページ要求ごとに複数回呼び出すことは避けてください。

4
J.D.

これはあなたの問題を直接解決しないかもしれませんが、私はあなたがWordPress.orgを避けたいのであればGitHub(またはBitbucket)であなたのプラグインをホストできることを述べたいと思います。

そのためのアップデータプラグインがあり、Tut +にはそのための優れたチュートリアルがあります。 自動更新を使ってGitHubにプラグインを配布する

2
obstschale