Este posibil să folosești add_action în interiorul unei funcții?
Î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?
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.

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ă.
