Perché usare function_exists in WordPress? Differenze tra if e add_action
Ho notato che molti sviluppatori di temi WordPress usano questo codice in functions.php
if (function_exists('register_nav_menus')) {
register_nav_menus (array('primary' => 'Navigazione Header'));
}
Personalmente, io uso sempre add_action per ogni funzione che inserisco in functions.php
Quindi, il codice sopra sarebbe scritto così:
add_action('init', 'my_register_nav_menus');
function my_register_nav_menus() {
register_nav_menus (array('primary' => 'Navigazione Header'));
}
Ho due domande:
Perché usare l'istruzione if nel primo metodo?
Quale dei due è il modo corretto?

Controllare se le funzioni integrate di WordPress esistono prima di chiamarle è per la compatibilità con le versioni precedenti che, a mio parere, non è necessaria.
Quindi, se vedi if ( function_exists( 'register_nav_menus' ) )
, l'autore del tema sta supportando versioni precedenti alla 3.0.
A volte vedi ancora if ( function_exists( 'dynamic_sidebar' ) )
Perché? Non potrei dirtelo perché dynamic_sidebar è stata introdotta nella versione 2.2.
Un altro motivo per utilizzarlo è rendere il tuo tema o plugin "pluggable". Una funzione pluggable è una che può essere sovrascritta in un child theme o in un altro plugin.
Questo viene fatto nella definizione, non nella chiamata, e si utilizza l'operatore ! per assicurarsi che non esista già prima di definirla.
if ( ! function_exists( 'my_awesome_function' ) ) {
/**
* La mia funzione fantastica è fantastica
*
* @param array $args
* @return array
*/
function my_awesome_function( $args ) {
// codice della funzione
return array();
}
}
Quando viene fatto così, un child theme o un altro plugin può sovrascrivere quella funzione con la propria.

La funzione function_exists
non è un altro modo per caricare una funzione come add_action
, serve a verificare nel tuo codice che non ci siano altre funzioni con lo stesso nome in modo da non causare errori. Dal sito php.net:
Controlla l'elenco delle funzioni definite, sia quelle integrate (interne) che quelle definite dall'utente, per verificare la presenza di function_name.
Se hai la stessa funzione due volte nel tuo codice, causerà un errore, ecco perché è consigliabile prefissare le tue funzioni con qualcosa di diverso da wp_.
Per saperne di più: http://php.net/manual/en/function.function-exists.php

puoi usare http://php.net/function_exists
if(function_exists('mia_funzione')){
// mia_funzione è definita
}
OPPURE se vuoi vedere tutte le funzioni disponibili, puoi anche stamparle tutte,
echo "<pre>"; print_r(get_defined_functions());
stampa nella pagina e puoi cercare quella funzione se non è presente nella lista significa che non è disponibile per l'uso.
potresti aver bisogno di attivare l'estensione per una specifica libreria.

function_exists
dovrebbe essere utilizzato dopo il nome della funzione in un tema, non prima.
add_action( 'loop_start', 'add_slider' );
function add_slider() {
if ( function_exists( 'soliloquy' ) ) {
soliloquy( 'slider', 'slug' );
}
}
Questo controllo serve per assicurarsi che il plugin sia attivo prima di eseguire una funzione e/o generare del markup, altrimenti potresti ottenere un errore del tipo "call to undefined function".

php.net definisce questo come
(PHP 4, PHP 5, PHP 7) function_exists — Restituisce TRUE se la funzione specificata è stata definita
Devo concordare con Michelle nell'utilizzo nel senso che si [dovreb]be usare il controllo solo per qualcosa di simile al controllo del type cast; quindi si verificherebbe se una funzione esiste (in quella pagina o da qualsiasi cosa richiamata in quella pagina/file) per poi sapere se è sicuro eseguire un'altra funzione o interpretare del template HTML.
Come qualcuno ha menzionato, è comunemente usato per verificare se il tuo file/tema (usando WordPress) è in grado di eseguire la richiesta necessaria. L'ho usato per verificare se un tema ha una specifica parte di template.
if ( function_exists( 'register_sidebar' ) ) {
get_sidebar();
}
