Este posibil să folosești add_action în interiorul unei funcții?

20 mar. 2012, 05:37:49
Vizualizări: 18K
Voturi: 6

Încerc să adaug niște JS în head folosind add_action('wp_head', 'js_func'); care funcționează când este plasat imediat după funcție, dar nu vreau să fie afișat pe toate paginile, doar pe pagina relevantă. Încerc să fac asta în felul următor:

function things_to_do_on_this_page() {
    add_action('wp_head', 'js_func');
    //alte acțiuni în funcție
}

Totuși, când este apelat în acest mod, JS nu este inserat deloc, ceea ce duce la defecțiunea paginii.

Este posibil să faci asta?

2
Comentarii

când în procesul de solicitare apelezi acea funcție?

Milo Milo
20 mar. 2012 05:55:58

Probabil ar fi mai util dacă ai reformula întrebarea pentru a întreba cum să conectezi condiționat la o acțiune. De asemenea: care sunt condițiile în care dorești să încarci acest script?

Chip Bennett Chip Bennett
20 mar. 2012 17:02:08
Toate răspunsurile la întrebare 1
2

Dacă dorești să afli dacă te afli pe o anumită pagină, postare, într-o arhivă de categorii etc., atunci WordPress oferă Etichete Condiționale pentru aceasta.

Dacă dorești să atașezi o definiție de script js, atunci o modalitate mai bună de a face acest lucru este următoarea:

// Presupunând că plasezi codul tău js într-un fișier separat în loc să-l pui între tag-uri <script>

// 1. Înregistrează în timpul hook-ului init
function add_my_script()
{
    wp_register_script( $name, $url, $dependency, filemtime( $path ), true )
}
add_action( 'init', 'add_my_script' );

// 2. Adaugă în coadă în timpul hook-ului enqueue
function enqueue_my_script()
{
    // Alege condițiile tale:
    // Pe Admin, verifică împotriva "global $hook_suffix, $pagenow, $typenow"
    if ( 'post-new.php' !== $typenow )
        return;
    // Pe paginile publice, alege condițiile din lista de Etichete Condiționale
    // Exemplu: Doar pe pagini
    if ( ! is_page() )
        return;
    // ...Nimic de făcut la autentificare

    // afișează scriptul pe ecran
    wp_enqueue_script( $name );
}
// Alege unde ai nevoie de el
add_action( 'wp_enqueue_scripts', 'enqueue_my_script' );
add_action( 'admin_enqueue_scripts', 'enqueue_my_script' );
add_action( 'login_enqueue_scripts', 'enqueue_my_script' );

EDITARE

Poți rezuma/colecta toate funcțiile tale mici, care sunt atașate undeva și pune apelurile add_action într-o funcție care este încărcată la primul hook disponibil pentru teme: after_setup_theme. Important este că functions.php din tema copil este încărcat primul, apoi cel din tema părinte și apoi hook-ul after_setup_theme. Astfel, poți lăsa posibilitatea deschisă de a modifica lucruri din interiorul temei părinte sau copil.

function theme_bootstrap_fn() 
{
    add_action( 'wp_head', 'js_func' );
    // alte funcționalități
}
add_action( 'after_setup_theme', 'theme_bootstrap_fn' );

// Definește funcția ta:
function js_func()
{
    echo "
        <script type='text/javascript'>
            // fă lucruri
            // Adaugă variabile astfel:
            {$some_var}
        </script>";
}

Dar pentru a răspunde la întrebarea ta: Da, poți apela orice funcție globală în interiorul altei funcții.

20 mar. 2012 06:00:23
Comentarii

Am scriptul, este doar un fragment de cod "liber" pe care vreau să-l adaug pentru a afișa și ascunde div-uri în funcție de o casetă de bifare, așa că nu trebuie să încarc toate scripturile, doar să-l plasez pe pagină când este apelată acea funcție specifică.

Joshua Joshua
20 mar. 2012 07:48:19

@Joshua Poate vei adăuga mai mult js mai târziu, așa că în opinia mea nu este niciodată o idee proastă. Dacă folosești plugin-uri precum Cachify, atunci fișierele sunt colectate și grupate într-unul singur, deci nu contează. Dar: Vezi editarea.

kaiser kaiser
20 mar. 2012 16:54:09