Warum verwenden, wenn function_exists?

30

Ich habe festgestellt, dass viele Entwickler von WordPress-Themes dies in functions.php verwenden würden

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

Für mich benutze ich immer add_action für jede Funktion, die ich in functions.php benutze

Das obige würde also geschrieben werden als:

add_action('init', 'my_register_nav_menus');

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

Ich habe zwei Fragen:

  1. Warum die if-Anweisung in der ersten Methode verwenden?

  2. Welcher ist der richtige Weg?

Greeso
quelle

Antworten:

35

Überprüfen Sie vor dem Aufrufen, ob integrierte WordPress-Funktionen vorhanden sind, um die Abwärtskompatibilität zu gewährleisten, die IMHO nicht benötigt.

Wenn Sie also sehen, dass if ( function_exists( 'register_nav_menus' ) )der Autor des Themas Versionen vor 3.0 unterstützt.

Sie sehen immer noch manchmal, if ( function_exists( 'dynamic_sidebar' ) )warum? Ich konnte es Ihnen nicht sagen, da dynamic_sidebar in 2.2 eingeführt wurde.

Ein weiterer Grund, es zu verwenden, besteht darin, Ihr Theme oder Plugin steckbar zu machen. Eine Plug-in-Funktion kann in einem untergeordneten Design oder einem anderen Plug-in überschrieben werden.

Dies erfolgt über die Definition nicht über den Aufruf und Sie benutzen den! um sicherzustellen, dass es noch nicht existiert, bevor Sie es definieren.

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

Wenn dies erledigt ist, kann ein untergeordnetes Thema oder ein anderes Plugin diese Funktion mit der eigenen überschreiben.

Chris_O
quelle
9

Die function_existsFunktion ist keine andere Möglichkeit, die Funktion zu laden, wie sie, add_actionum Ihren Code zu überprüfen und festzustellen, ob es keine andere Funktion mit demselben Namen gibt, damit Ihr Code nicht beschädigt wird. Von php.net:

Überprüft die Liste der vordefinierten (internen) und benutzerdefinierten Funktionen auf Funktionsname.

Wenn Sie die gleiche Funktion zweimal in Ihrem Code haben, bricht sie, deshalb stellen Sie Ihrer Funktion etwas anderes als wp_ voran.

Lesen Sie mehr: http://php.net/manual/en/function.function-exists.php

Pontus Abrahamsson
quelle
0

Sie können http://php.net/function_exists verwenden

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

ODER wenn Sie alle verfügbaren Funktionen anzeigen möchten, damit Sie auch alle drucken können,

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

Wenn Sie auf Seite drucken, können Sie diese Funktion durchsuchen, wenn sie nicht in der Liste gefunden wird. Dies bedeutet, dass sie nicht verwendet werden kann.

Möglicherweise müssen Sie die Erweiterung für eine bestimmte Bibliothek aktivieren.

manish1706
quelle
0

php.net definiert dies als

(PHP 4, PHP 5, PHP 7) function_exists - Gibt TRUE zurück, wenn die angegebene Funktion definiert wurde

Ich muss Michelle in der Verwendung zustimmen, dass Sie [sh] den Scheck nur für etwas verwenden sollten, das der Prüfung von Typumwandlungen ähnelt; Sie würden also suchen, ob eine Funktion vorhanden ist (auf dieser Seite oder von irgendetwas, das auf dieser Seite / Dateireferenz aufgerufen wird), damit Sie wissen, ob es sicher ist, eine andere Funktion auszuführen oder eine HTML-Vorlage zu analysieren.

Wie bereits erwähnt, wird es häufig verwendet, um zu überprüfen, ob Ihre Datei / Ihr Design (mit WordPress) in der Lage ist, die von Ihnen benötigte Anfrage auszuführen. Ich habe es verwendet, um zu überprüfen, ob ein Thema einen bestimmten Vorlagenteil hat.

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

Südwesten
quelle
0

function_exists sollte nach dem Funktionsnamen in einem Thema nicht vorher verwendet werden.

add_action( 'loop_start', 'add_slider' );

function add_slider() {

if ( function_exists( 'soliloquy' ) ) { 

soliloquy( 'slider', 'slug' ); 

    }

}

Dadurch wird überprüft, ob das Plugin aktiv ist, bevor eine Funktion und / oder ein Markup ausgegeben wird. Andernfalls wird möglicherweise ein Fehler wie der Aufruf einer undefinierten Funktion angezeigt.

Michelle
quelle