¿Por qué usar si exista function_?

25

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

Por lo tanto, 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?

pregunta Greeso 23.08.2013 - 09:30

4 respuestas

27

La verificación para ver si existen funciones de WordPress integradas antes de llamarlas es por compatibilidad con versiones anteriores, lo que no es IMHO.

Entonces, si ves if ( function_exists( 'register_nav_menus' ) ) , el autor del tema es compatible con versiones anteriores a la 3.0.

Todavía ves a veces 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 tu tema o plugin sea conectable. Una función conectable es una que se puede anular en un tema secundario u otro complemento.

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

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 la propia.

    
respondido por el Chris_O 23.08.2013 - 12:31
8

La función function_exists no es otra forma de cargar la función como add_action its para verificar su código y ver que no haya otra función con ese mismo nombre, por lo que no romperá su código. Desde php.net:

  

Comprueba la lista de funciones definidas, tanto incorporadas (internas) como   definido por el usuario, para function_name.

Si tienes la misma función dos veces en tu código, se romperá, por eso prefieres Tu función con algo más que wp_.

Lea más: enlace

    
respondido por el Pontus Abrahamsson 23.08.2013 - 09:43
0

puede utilizar enlace

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

O si desea ver todas las funciones disponibles, por lo que 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 necesites activar la extensión para una biblioteca en particular.

    
respondido por el manish1706 08.02.2017 - 12:22
0

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

add_action( 'loop_start', 'add_slider' );

function add_slider() {

if ( function_exists( 'soliloquy' ) ) { 

soliloquy( 'slider', 'slug' ); 

    }

}
    
respondido por el Michelle 29.03.2018 - 15:55

Lea otras preguntas en las etiquetas