web-dev-qa-db-ja.com

プラグインで使用されている関数を廃止するにはどうすればいいですか?

私のプラグインで使用している機能の1つは、他の機能(別のプラグインで使用されている)と衝突する可能性のある名前でグローバルスコープを汚染することです。だから、私はそれを非難するべきだと思います。しかし、どうすればいいのでしょうか。

function foo() {
    echo 'bar';
}

私は_deprecate_function()を知っていますが、私のプラグインのコアから関数を削除するために私がとらなければならないすべてのステップを示す例に感謝します。

参照: https://developer.wordpress.org/reference/functions/_deprecated_function/ /

15
henrywright

@Welcherによる回答に加えて:

コアにはいくつかの良い " graveyard "の例があります。ここで "関数は"になります。

あなたはそれらをガイドラインとして使うことができます。ドキュメンテーションに関して。

これが wp-includes/deprecated.php の下のpermalink_link()の例です。

/**
 * Print the permalink of the current post in the loop.
 *
 * @since 0.71
 * @deprecated 1.2.0 Use the_permalink()
 * @see the_permalink()
 */
function permalink_link() {
        _deprecated_function( __FUNCTION__, '1.2', 'the_permalink()' );
        the_permalink();
}

入力引数を説明する _deprecated_function 関数のインラインドキュメントは次のとおりです。

/**
 * Mark a function as deprecated and inform when it has been used.
 *
 * There is a hook deprecated_function_run that will be called that can be used
 * to get the backtrace up to what file and function called the deprecated
 * function.
 *
 * The current behavior is to trigger a user error if WP_DEBUG is true.
 *
 * This function is to be used in every function that is deprecated.
 *
 * @since 2.5.0
 * @access private
 *
 * @param string $function    The function that was called.
 * @param string $version     The version of WordPress that deprecated the function.
 * @param string $replacement Optional. The function that should have been called. 
 *                            Default null.
 */
9
birgire

非推奨は必ずしも削除されることと同じではありません。通常、アイテムはAPIからのEVENTUAL削除のマークが付けられていることを意味します。これは、他のプラグインや開発者のように、外部から呼び出されるメソッドですか?このメソッドがプラグインによって内部でのみ使用されている場合は、おそらく安全に削除して、より良い名前の関数に置き換えてください。

そうでない場合は、より良い名前の関数を作成し、__doing_it_wrong呼び出しを使用して不適切な名前の関数を呼び出すようにします。これについては codex で読んでください。メソッドへの参照を使用し、後のバージョンで安全にメソッドを削除できます。

function badly_named() {

    __doing_it_wrong( 'badly_named', 'This method has been deprecated in favor of better_named_function' );

    /**
     * Call the better named method
     */
     better_named_function();
}

お役に立てれば!

7
Welcher

私は以下のようなものを提案します:

/**
 * @deprecated Please use good_function_name() instead
 * @since x.y.z Marked deprecated in favor of good_function_name()
 * @see good_function_name()
 */
function bad_function_name() {
    trigger_error(
        'The ' . __FUNCTION__ . ' function is deprecated. ' .
        'Please use good_function_name() instead.',
        defined( 'E_USER_DEPRECATED' ) ? E_USER_DEPRECATED : E_USER_WARNING
    );

    return good_function_name();
}

これには、スタックトレースとともにログに廃止予定の警告を表示する効果があります。当然、これはWordPressでロギングが有効になっている場合にのみ機能します。

E_USER_DEPRECATED定数はPHP 5.3.0でのみ導入されたため、3項演算子があります。古いバージョンでは、代わりに単純なユーザー警告にフォールバックすることができます。

エラー定数の PHPマニュアルから

E_DEPRECATED ランタイム通知。これを有効にすると、将来のバージョンでは動作しなくなるコードに関する警告を受け取ることができます。

私が _doing_it_wrong または __deprecated_function を使用したくないのは、これらの関数はWordPressコア専用のためです。これらの関数のコードリファレンスから:

この機能へのアクセスは非公開に設定されています。これは、プラグインやテーマ開発者による使用を意図しておらず、他のコア機能での使用のみを目的としています。完全を期すためにここにリストされています。

1
alexg

現在のプラグインはEOLなので、新しいプラグインを作成し、それに移行するようユーザーにアドバイスします。

プラグインとテーマの作者が公開APIを変更して、それを「単なるもう1つの小さなアップグレード」として扱うようにすることよりも面倒なことはありません。ユーザーが実際に影響を受けていないという問題のためにサイトを破壊する理由はありません。

1
Mark Kaplun