web-dev-qa-db-ja.com

Function_existsが使用されるのはなぜですか?

私は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. どちらが正しい方法ですか?

27
Greeso

それらを呼び出す前に、組み込みのWordPress関数が存在するかどうかを確認することは、下位互換性のためです。

if ( function_exists( 'register_nav_menus' ) )と表示されている場合、テーマの作者は3.0より前のバージョンをサポートしています。

あなたはまだ時々if ( function_exists( 'dynamic_sidebar' ) )を見ますなぜですか? dynamic_sidebarが2.2で導入されたので、私はあなたに言うことができませんでした。

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

これは呼び出しではなく定義上で行われます。定義する前に存在しないことを確認するための演算子。

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();
  }
}

これが行われるとき、子テーマまたは他のプラグインはそれ自身でその機能をオーバーライドすることができます。

30
Chris_O

function_exists関数は、add_action itsのように、同じ名前の関数が他にないことを確認してコードを破壊しないようにするための、他の方法ではありません。 php.netから:

Function_nameについて、定義済みの関数(組み込み(内部)とユーザー定義の両方)のリストを調べます。

あなたのコードの中に同じ関数が二度あると、それは壊れるでしょう、それであなたは あなたの 関数の前にwp_以外の何かをつけるのです。

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

9

function_existsは、テーマ内の関数名の後に使用する必要があります。

add_action( 'loop_start', 'add_slider' );

function add_slider() {

if ( function_exists( 'soliloquy' ) ) { 

soliloquy( 'slider', 'slug' ); 

    }

}
0
Michelle

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

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

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

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

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

0
tradesouthwest

あなたは http://php.net/function_exists を使うことができます

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

または、すべての機能を利用可能にしたい場合は、すべてを印刷してください。

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

ページに印刷して、リストに見つからない場合はその機能を検索できます。使用できないことを意味します。

あなたは特定のライブラリのために拡張機能を有効にする必要があるかもしれません。

0
manish1706