Por que usar se function_exists?

30

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

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

Para mim, sempre uso add_action para todas as funções que estou usando em functions.php

Portanto, 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?

Greeso
fonte

Respostas:

35

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

Portanto, se você vir 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 sabia o porque o dynamic_sidebar foi introduzido no 2.2.

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

Isso é feito na definição, não na chamada e você usa o! operador para garantir que ele ainda não exista 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 seu próprio.

Chris_O
fonte
9

A function_existsfunção não é outra maneira de carregar a função comoadd_action sua para verificar seu código para ver se não há outra função com o mesmo nome, para que ela não quebre seu código. Do php.net:

Verifica a lista de funções definidas, internas (internas) e definidas pelo usuário, para nome da função.

Se você tiver a mesma função duas vezes em seu código, ela será quebrada, por isso você prefixará Your função com algo além de wp_.

Leia mais: http://php.net/manual/en/function.function-exists.php

Pontus Abrahamsson
fonte
0

você pode usar http://php.net/function_exists

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

OU se você deseja ver a função all disponível, também imprime tudo,

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

imprimir na página e você pode pesquisar essa função se 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.

manish1706
fonte
0

php.net define isso como

(PHP 4, PHP 5, PHP 7) function_exists - Retorna TRUE se a função especificada tiver sido definida

Eu tenho que concordar com Michelle em uso, pois você só deve usar a verificação de algo semelhante à verificação de conversão de tipo; portanto, você procuraria se existisse uma função (nessa página ou de qualquer coisa chamada nessa referência de página / arquivo); portanto, você saberia se é seguro executar outra função ou analisar algum modelo HTML possível.

Como alguém mencionou, é usado normalmente para verificar se o seu arquivo / tema (usando o WordPress) é capaz de executar a solicitação necessária. Eu usei-o para verificar se um tema tem uma parte específica do modelo.

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

tradesouthwest
fonte
0

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

add_action( 'loop_start', 'add_slider' );

function add_slider() {

if ( function_exists( 'soliloquy' ) ) { 

soliloquy( 'slider', 'slug' ); 

    }

}

Isso verifica se o plug-in está ativo antes de gerar uma função e / ou marcação, caso contrário, você poderá receber um erro como uma chamada para uma função indefinida.

Michelle
fonte