È possibile usare add_action all'interno di una funzione in WordPress?
Sto cercando di aggiungere del codice JS all'head utilizzando add_action('wp_head', 'js_func');
che funziona quando inserito direttamente dopo la funzione, tuttavia non voglio che venga caricato in tutte le pagine, ma solo nella pagina rilevante. Sto provando a farlo in questo modo:
function things_to_do_on_this_page() {
add_action('wp_head', 'js_func');
// altre operazioni della funzione
}
Tuttavia, quando viene chiamato in questo modo, il JS non viene inserito affatto, rompendo la pagina.
È possibile fare questo?
Se vuoi scoprire se ti trovi su una pagina specifica, un articolo, in un archivio di categoria, ecc., il core di WordPress offre i Tag Condizionali per questo scopo.
Se vuoi collegare una definizione di script js, allora un modo migliore per farlo è il seguente:
// Supponendo che tu inserisca il tuo codice js in un file separato invece che tra i tag <script>
// 1°: Registra durante l'hook init
function add_my_script()
{
wp_register_script( $name, $url, $dependency, filemtime( $path ), true )
}
add_action( 'init', 'add_my_script' );
// 2°: Accoda durante l'hook enqueue
function enqueue_my_script()
{
// Scegli le tue condizioni:
// In Admin, controlla contro "global $hook_suffix, $pagenow, $typenow"
if ( 'post-new.php' !== $typenow )
return;
// Nelle pagine pubbliche, scegli le condizioni dalla lista dei Tag Condizionali
// Esempio: Solo sulle pagine
if ( ! is_page() )
return;
// ...Niente da fare nel login
// stampa lo script sullo schermo
wp_enqueue_script( $name );
}
// Scegli dove ti serve
add_action( 'wp_enqueue_scripts', 'enqueue_my_script' );
add_action( 'admin_enqueue_scripts', 'enqueue_my_script' );
add_action( 'login_enqueue_scripts', 'enqueue_my_script' );
MODIFICA
Puoi riassumere/raccogliere tutte le tue piccole funzioni, che vengono agganciate da qualche parte e inserire le chiamate add_action
in una funzione che viene caricata sul primo hook disponibile per i temi: after_setup_theme
. È importante che il functions.php del tema figlio venga caricato per primo, poi quello del tema genitore e infine l'hook after_setup_theme
. In questo modo puoi lasciare aperta la possibilità di modificare le cose dall'interno del tuo tema genitore o figlio.
function theme_bootstrap_fn()
{
add_action( 'wp_head', 'js_func' );
// altre funzioni
}
add_action( 'after_setup_theme', 'theme_bootstrap_fn' );
// Definisci la tua funzione:
function js_func()
{
echo "
<script type='text/javascript>
// fai cose
// Aggiungi variabili così:
{$some_var}
</script>";
}
Ma per rispondere alla tua domanda: Sì, puoi chiamare qualsiasi funzione globale all'interno di un'altra funzione.

Ho lo script, è solo un pezzo di codice "sciolto" che voglio inserire per mostrare e nascondere div in base a una checkbox, quindi non ho bisogno di accodare tutti gli script, basta posizionarlo sulla pagina quando viene chiamata quella particolare funzione.
