add_action en una función, ¿es posible?

4

Estoy tratando de agregar algunos js al encabezado usando add_action('wp_head', 'js_func'); que funciona cuando se publica justo después de la función, sin embargo, no quiero que se publique en todas las páginas, solo la página en la que es relevante y estoy tratando de hacer como tal

function things_to_do_on_this_page() {
    add_action('wp_head', 'js_func');
    //other functiony things
}

Sin embargo, cuando se llama como así, el js no se coloca en absoluto, rompiendo así la página.

¿Es posible hacer esto?

    
pregunta Joshua 20.03.2012 - 04:37

1 respuesta

5

Si desea saber si está en una página específica, en una publicación, en un archivo de categorías, etc., entonces el núcleo tiene que ofrecer Etiquetas condicionales para esto.

Si desea enganchar una definición de script js, entonces una mejor manera de hacerlo es la siguiente:

// Assuming that you drop your js code into a separate file instead of just between <script>-tags

// 1st: Register during init hook
function add_my_script()
{
    wp_register_script( $name, $url, $dependency, filemtime( $path ), true )
}
add_action( 'init', 'add_my_script' );

// 2nd: Enqueue during enqueue hook
function enqueue_my_script()
{
    // Choose your conditions:
    // On Admin, check against "global $hook_suffix, $pagenow, $typenow"
    if ( 'post-new.php' !== $typenow )
        return;
    // On public pages, choose your conditions from the list of Conditional Tags
    // Example: Only on pages
    if ( ! is_page() )
        return;
    // ...Nothing to do on login

    // print the script to the screen
    wp_enqueue_script( $name );
}
// Choose where you need it
add_action( 'wp_enqueue_scripts', 'enqueue_my_script' );
add_action( 'admin_enqueue_scripts', 'enqueue_my_script' );
add_action( 'login_enqueue_scripts', 'enqueue_my_script' );

EDIT

Puede resumir / recopilar todas sus pequeñas funciones, que se enganchan en alguna parte y ponen las llamadas add_action en una función que se carga en el primer enlace que está disponible para los temas: after_setup_theme . Es importante que las funciones de los temas secundarios se carguen primero, luego los temas principales y luego el gancho after_setup_theme . Por lo tanto, puede dejar abierta la posibilidad de cambiar las cosas desde su tema principal o secundario.

function theme_bootstrap_fn() 
{
    add_action( 'wp_head', 'js_func' );
    // other functiony things
}
add_action( 'after_setup_theme', 'theme_bootstrap_fn' );

// Define your function:
function js_func()
{
    echo "
        <script type='text/javascript>
            // do stuff
            // Add variables like this:
            {$some_var}
        </script>";
}

Pero para responder a su pregunta: Sí, puede llamar a todas las funciones globales dentro de otra función.

    
respondido por el kaiser 20.03.2012 - 05:00

Lea otras preguntas en las etiquetas