Por que usar se function_exists?

25

Notei que muitos desenvolvedores de temas do WordPress usavam isso em functions.php

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

Para mim, eu sempre uso add_action para cada função que estou usando em functions.php

Então, o acima seria escrito como:

add_action('init', 'my_register_nav_menus');

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

Eu tenho duas perguntas:

  1. Por que usar a instrução if no primeiro método?

  2. Qual é o caminho correto?

por Greeso 23.08.2013 / 09:30
fonte

4 respostas

27

Verificar se as funções do WordPress foram criadas antes de chamá-las é para compatibilidade com versões anteriores, o que não é necessário para a IMHO.

Então, se você ver if ( function_exists( 'register_nav_menus' ) ) , o autor do tema está suportando versões anteriores à 3.0.

Você ainda vê algumas vezes if ( function_exists( 'dynamic_sidebar' ) ) Por quê? Eu não poderia te dizer porque o dynamic_sidebar foi introduzido no 2.2.

Outro motivo para usá-lo é tornar seu tema ou plug-in pluggable. Uma função conectável é aquela que pode ser substituída em um tema filho ou outro plug-in.

Isso é feito na definição e não na chamada e você usa o! operador para ter certeza de que ele ainda não existe antes de defini-lo.

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

Quando isso é feito, um tema filho ou outro plug-in pode substituir essa função por ela própria.

    
por Chris_O 23.08.2013 / 12:31
fonte
8

A função function_exists não é uma outra maneira de carregar a função como add_action its para verificar seu código para ver que não há outra função com o mesmo nome para que ele não quebre seu código. De php.net:

  

Verifica a lista de funções definidas, internas (internas) e   definido pelo usuário, para function_name.

Se você tiver a mesma função duas vezes no seu código, ele irá quebrar, por isso você prefixará a Sua função com algo diferente de wp _.

Leia mais: enlace

    
por Pontus Abrahamsson 23.08.2013 / 09:43
fonte
0

você pode usar enlace

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

OU se você quiser ver todas as funções disponíveis, você também imprime todas,

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

imprimir na página e você pode pesquisar essa função se ela não for encontrada na lista significa que ela não está disponível para uso.

pode ser necessário ativar a extensão para uma biblioteca específica.

    
por manish1706 08.02.2017 / 12:22
fonte
0

function_exists deve ser usado após o nome da função em um tema não anterior.

add_action( 'loop_start', 'add_slider' );

function add_slider() {

if ( function_exists( 'soliloquy' ) ) { 

soliloquy( 'slider', 'slug' ); 

    }

}
    
por Michelle 29.03.2018 / 15:55
fonte

Tags