web-dev-qa-db-ja.com

プラグインのプラガブル関数を上書きしますか?

WordPressにはpluggable.phpというファイルがあり、これにはプラグインで上書きできる関数のリストが含まれています。

私が直面している(私はwp_authenticateをオーバーライドしている)問題は、私がこのプラグインを有効にしようとしている私のネットワークの中の各ブログのためです、私は得ます:

失敗、以前はpluggable.phpで宣言されていたwp_authenticateを再宣言できません

これはやや使いやすさを損ないます、私はそれがきちんと動くようにするためにプラグインファイルの中の機能をコメントして、プラグインをアクティブにして、機能をコメント解除しなければなりません。

それをする正しい方法は何ですか?
プラグインをダウンロードするユーザーがそれをすべて行うことを期待できません。

3.5 +マルチサイト構成を使用しています

関数をif( ! function_exists( 'wp_authenticate' ) )でラップしてエラーを取り除き、プラグインを有効にしてください。

if( ! function_exists( 'wp_authenticate' ) ){
    function wp_authenticate(){}
}

プラグインをアクティブにするというコンテキストでは、関数がすでに存在し、アクティブ化された後に初めてプラグインが最初にロードされ、pluggable.php内のオリジナルをオーバーライドするためです。サンドボックス内でプラグインがアクティブ化され、致命的なエラーが発生すると、アクティブ化や正常な動作状態への回復が妨げられる可能性があります。

5
Milo

しかしあなたのプラグインがpluggables.phpの中の関数(wp_safe_redirectのような)を必要とするなら、あなたは手動でそのファイルをinclude_onceしなければなりません。そうでなければ、そのpluggables.phpファイルにある関数に対して、 '未定義関数の呼び出し'エラーが発生します。

私はこうやった

    if ( !function_exists('wp_safe_redirect')) {
        require_once (ABSPATH . WPINC . '/pluggable.php');
     }

関数名(この場合は 'wp_safe_redirect')を必要な関数に置き換えます。

おそらく、これは私がそのエラーを理解するのを試みるのに費やした数時間を誰かを救うでしょう。

0
Rick Hellewell