web-dev-qa-db-fra.com

Pourquoi utiliser si function_exists?

J'ai remarqué que beaucoup de développeurs de thèmes WordPress utiliseraient ceci dans functions.php

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

Pour moi, j'utilise toujours add_action pour chaque fonction que j'utilise dans functions.php

Donc, ce qui précède serait écrit comme:

add_action('init', 'my_register_nav_menus');

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

J'ai deux questions:

  1. Pourquoi utiliser l'instruction if dans la première méthode?

  2. Lequel est le bon chemin?

27
Greeso

Vérifier si les fonctions WordPress intégrées existent avant de les appeler est une compatibilité ascendante pour laquelle IMHO n'est pas nécessaire.

Donc, si vous voyez if ( function_exists( 'register_nav_menus' ) ), l'auteur du thème prend en charge les versions antérieures à la version 3.0.

Vous voyez encore parfois if ( function_exists( 'dynamic_sidebar' ) ) Pourquoi? Je ne saurais vous dire parce que dynamic_sidebar a été introduit dans la version 2.2.

Une autre raison de l'utiliser est de rendre votre thème ou plugin pluggable. Une fonction connectable est une fonction qui peut être remplacée dans un thème enfant ou un autre plugin.

Ceci est fait sur la définition pas l'appel et vous utilisez le! opérateur pour s’assurer qu’il n’existe pas déjà avant de le définir.

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

Lorsque cela est fait, un thème enfant ou un autre plugin peut remplacer cette fonction par son propre.

30
Chris_O

La fonction function_exists n'est pas un autre moyen de charger la fonction telle que add_action et vérifie votre code pour vérifier qu'il n'y a pas d'autre fonction portant le même nom afin d'éviter qu'elle ne rompt votre code. De php.net:

Vérifie la liste des fonctions définies, à la fois intégrées (internes) et définies par l'utilisateur, pour nom_fonction.

Si vous avez la même fonction deux fois dans votre code, cela cassera, c’est pourquoi vous préfixez Your avec autre chose que wp_.

En savoir plus: http://php.net/manual/en/function.function-exists.php

9
Pontus Abrahamsson

function_exists devrait être utilisé après le nom de la fonction dans un thème pas avant.

add_action( 'loop_start', 'add_slider' );

function add_slider() {

if ( function_exists( 'soliloquy' ) ) { 

soliloquy( 'slider', 'slug' ); 

    }

}
0
Michelle

vous pouvez utiliser http://php.net/function_exists

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

OU si vous voulez voir toutes les fonctions disponibles, alors vous imprimez aussi tout,

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

imprimer sur la page et vous pouvez rechercher cette fonction si elle ne figure pas dans la liste signifie qu’elle n’est pas disponible.

vous devrez peut-être activer l'extension pour une bibliothèque particulière.

0
manish1706