¿Por qué usar if function_exists?

30

Noté que muchos desarrolladores de temas de WordPress usarían esto en functions.php

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

Para mí, siempre uso add_action para cada función que estoy usando en functions.php

Entonces, lo anterior se escribiría como:

add_action('init', 'my_register_nav_menus');

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

Tengo dos preguntas:

  1. ¿Por qué usar la instrucción if en el primer método?

  2. ¿Cuál es la forma correcta?

Greeso
fuente

Respuestas:

35

Comprobar si existen funciones integradas de WordPress antes de llamarlas es por compatibilidad con versiones anteriores, lo que en mi humilde opinión no es necesario.

Entonces, si ve que if ( function_exists( 'register_nav_menus' ) )el autor del tema admite versiones anteriores a la 3.0.

Todavía a veces ves if ( function_exists( 'dynamic_sidebar' ) )¿Por qué? No podría decirte porque Dynamic_sidebar se introdujo en 2.2.

Otra razón para usarlo es hacer que su tema o complemento sea conectable. Una función conectable es aquella que se puede anular en un tema secundario u otro complemento.

Esto se hace en la definición, no en la llamada, y usa el! operador para asegurarse de que no exista antes de definirlo.

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

Cuando se hace esto, un tema secundario u otro complemento puede anular esa función con el suyo propio.

Chris_O
fuente
9

La function_existsfunción no es otra forma de cargar la función como add_actiones para verificar su código para ver que no hay otra función con el mismo nombre para que no rompa su código. Desde php.net:

Comprueba la lista de funciones definidas, tanto integradas (internas) como definidas por el usuario, para nombre_función.

Si tiene la misma función dos veces en su código, se romperá, es por eso que prefija Su función con algo más que wp_.

Leer más: http://php.net/manual/en/function.function-exists.php

Pontus Abrahamsson
fuente
0

puedes usar http://php.net/function_exists

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

O bien, si desea ver todas las funciones disponibles, también imprime todas,

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

imprima en la página y puede buscar esa función si no se encuentra en la lista significa que no está disponible para su uso.

Es posible que deba activar la extensión para una biblioteca en particular.

manish1706
fuente
0

php.net define esto como

(PHP 4, PHP 5, PHP 7) function_exists - Devuelve TRUE si la función dada ha sido definida

Tengo que estar de acuerdo con Michelle en el uso, ya que usted [solo] debería usar el cheque para algo similar al tipo de verificación de reparto; por lo que estaría buscando si existiera una función (en esa página o de cualquier cosa llamada en esa página / referencia de archivo) para saber si es seguro ejecutar otra función o analizar alguna plantilla HTML posiblemente.

Como alguien mencionó, se usa comúnmente para verificar si su archivo / tema (usando WordPress) puede ejecutar su solicitud necesaria. Lo he usado para verificar si un tema tiene una parte de plantilla específica.

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

Tradesouthwest
fuente
0

function_exists debe usarse después del nombre de la función en un tema, no antes.

add_action( 'loop_start', 'add_slider' );

function add_slider() {

if ( function_exists( 'soliloquy' ) ) { 

soliloquy( 'slider', 'slug' ); 

    }

}

Esto verifica para asegurarse de que el complemento esté activo antes de generar una función y / o marcado, de lo contrario, podría recibir un error como llamar a una función indefinida.

Michelle
fuente