function_existsを使用するのはなぜですか?


30

WordPressテーマの多くの開発者がfunctions.phpでこれを使用することに気付きました

if (function_exists('register_nav_menus')) {
    register_nav_menus (array('primary' => 'Header Navigation'));
}

私にとっては、functions.phpで使用しているすべての関数にadd_actionを常に使用しています。

したがって、上記は次のように記述されます。

add_action('init', 'my_register_nav_menus');

function my_register_nav_menus() {
    register_nav_menus (array('primary' => 'Header Navigation'));
}

2つの質問があります。

  1. 最初のメソッドでifステートメントを使用する理由

  2. どちらが正しい方法ですか?

回答:


35

呼び出す前に組み込みのWordPress関数が存在するかどうかを確認するのは、IMHOが必要としない下位互換性のためです。

そのif ( function_exists( 'register_nav_menus' ) )ため、テーマの作成者が3.0より前のバージョンをサポートしていることがわかります。

あなたはまだif ( function_exists( 'dynamic_sidebar' ) )なぜ時々見ますか?dynamic_sidebarは2.2で導入されたため、説明できませんでした。

それを使用するもう1つの理由は、テーマまたはプラグインをプラグ可能にすることです。プラグ可能な関数は、子テーマまたは別のプラグインでオーバーライドできる関数です。

これは呼び出しではなく定義で行われ、!定義する前に、既に存在しないことを確認する演算子。

if ( ! function_exists( 'my_awesome_function' ) ) {
/**
 * My Awesome function is awesome
 *
 * @param array $args
 * @return array
 */
function my_awesome_function( $args ) {
  //function stuff
  return array();
  }
}

これが完了すると、子テーマまたは他のプラグインがその関数を独自の関数でオーバーライドできます。


9

function_exists機能は以下のように機能をロードするための他の方法ではありませんadd_action、そのそれはあなたのコードを中断されませんので、同じ名前を持つ他の機能がないことを確認するためにあなたのコードをチェックするために。php.netから:

function_nameの定義済み関数(組み込み(内部)およびユーザー定義)のリストを確認します。

あなたのコードに二度同じ機能を持っている場合、それは、あなたが接頭辞Thatsなぜ壊れるあなたの wp_以外の何かと機能を。

続きを読む:http : //php.net/manual/en/function.function-exists.php


0

http://php.net/function_existsを使用できます

if(function_exists('my_function')){
   // my_function is defined
}

または、使用可能なすべての機能を表示するために、すべてを印刷する場合は、

echo "<pre>"; print_r(get_defined_functions());

ページに印刷します。リストにない場合は、その関数を検索できます。使用できないことを意味します。

特定のライブラリの拡張機能を有効にする必要がある場合があります。


0

php.netはこれを次のように定義します

(PHP 4、PHP 5、PHP 7)function_exists —指定された関数が定義されている場合にTRUEを返します

型キャストチェックに似たものに対してのみチェックを使用する必要があるという点で、Micheleの使用法に同意する必要があります。そのため、(そのページ上またはそのページ/ファイル参照で呼び出されたものから)関数が存在するかどうかを探しているので、別の関数を実行するか、テンプレートHTMLを解析することが安全かどうかを知ることができます。

誰かが言ったように、ファイル/テーマ(WordPressを使用)が必要なリクエストを実行できるかどうかを確認するためによく使用されます。テーマに特定のテンプレートパーツがあるかどうかを確認するために使用しました。

if ( function_exists( 'register_sidebar' ) ) { get_sidebar(); }


0

function_exists テーマの関数名の前ではなく使用する必要があります。

add_action( 'loop_start', 'add_slider' );

function add_slider() {

if ( function_exists( 'soliloquy' ) ) { 

soliloquy( 'slider', 'slug' ); 

    }

}

これは、関数やマークアップを出力する前にプラグインがアクティブであることを確認します。そうしないと、未定義関数の呼び出しなどのエラーが発生する可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.