È possibile usare add_action all'interno di una funzione in WordPress?

20 mar 2012, 05:37:49
Visualizzazioni: 18K
Voti: 6

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?

2
Commenti

in quale fase del processo di richiesta stai chiamando quella funzione?

Milo Milo
20 mar 2012 05:55:58

Sarebbe probabilmente più utile se riformulassi la tua domanda per chiedere come agganciarsi a un'azione in modo condizionale. Inoltre: quali sono le condizioni in cui vuoi accodare questo script?

Chip Bennett Chip Bennett
20 mar 2012 17:02:08
Tutte le risposte alla domanda 1
2

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.

20 mar 2012 06:00:23
Commenti

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.

Joshua Joshua
20 mar 2012 07:48:19

@Joshua Potresti aggiungere altro js in futuro, quindi a mio modesto parere non è mai una cattiva idea. Se usi plugin come Cachify, i file vengono raccolti e raggruppati in uno solo, quindi non importa. Ma: Vedi modifica.

kaiser kaiser
20 mar 2012 16:54:09