¿Es posible usar add_action dentro de una función en WordPress?
Estoy intentando agregar algo de JS al head usando add_action('wp_head', 'js_func');
lo cual funciona cuando se coloca justo después de la función. Sin embargo, no quiero que se cargue en todas las páginas, solo en la página relevante, y estoy intentando hacerlo así:
function cosas_para_hacer_en_esta_pagina() {
add_action('wp_head', 'js_func');
// otras cosas de la función
}
Sin embargo, cuando se llama de esta manera, el JS no se inserta en absoluto, lo que rompe la página.
¿Es posible hacer esto?
Si deseas saber si estás en una página específica, entrada, en un archivo de categoría, etc., el núcleo de WordPress ofrece Etiquetas Condicionales para esto.
Si deseas enlazar una definición de script JS, entonces una mejor manera de hacerlo es la siguiente:
// Asumiendo que colocas tu código JS en un archivo separado en lugar de solo entre etiquetas <script>
// 1ro: Registrar durante el hook init
function add_my_script()
{
wp_register_script( $name, $url, $dependency, filemtime( $path ), true )
}
add_action( 'init', 'add_my_script' );
// 2do: Encolar durante el hook enqueue
function enqueue_my_script()
{
// Elige tus condiciones:
// En el Admin, verifica contra "global $hook_suffix, $pagenow, $typenow"
if ( 'post-new.php' !== $typenow )
return;
// En páginas públicas, elige tus condiciones de la lista de Etiquetas Condicionales
// Ejemplo: Solo en páginas
if ( ! is_page() )
return;
// ...Nada que hacer en login
// imprime el script en pantalla
wp_enqueue_script( $name );
}
// Elige donde lo necesitas
add_action( 'wp_enqueue_scripts', 'enqueue_my_script' );
add_action( 'admin_enqueue_scripts', 'enqueue_my_script' );
add_action( 'login_enqueue_scripts', 'enqueue_my_script' );
EDITAR
Puedes resumir/recolectar todas tus pequeñas funciones, que se enlazan en algún lugar y colocar las llamadas add_action
en una función que se carga en el primer hook disponible para los temas: after_setup_theme
. Lo importante es que el functions.php del tema hijo se carga primero, luego el del tema padre y después el hook after_setup_theme
. Así puedes dejar abierta la posibilidad de cambiar cosas desde tu tema padre o hijo.
function theme_bootstrap_fn()
{
add_action( 'wp_head', 'js_func' );
// otras cosas de funciones
}
add_action( 'after_setup_theme', 'theme_bootstrap_fn' );
// Define tu función:
function js_func()
{
echo "
<script type='text/javascript>
// hacer cosas
// Añadir variables así:
{$some_var}
</script>";
}
Pero para responder tu pregunta: Sí, puedes llamar cualquier función global dentro de otra función.

Tengo el script, es solo un fragmento de código "suelto" que quiero colocar para mostrar y ocultar divs basado en una casilla de verificación, así que no necesito encolar todos los scripts, solo colocarlo en la página cuando se llame a esa función particular.
