add_action em uma função, é possível?

4

Estou tentando adicionar alguns js à cabeça usando add_action('wp_head', 'js_func'); , que funciona quando postado logo após a função, no entanto, não quero que seja postada em todas as páginas, apenas na página relevante e que estou tentando fazer é assim

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

No entanto, quando é chamado assim, o js não é colocado, quebrando a página.

É possível fazer isso?

    
por Joshua 20.03.2012 / 04:37

1 resposta

5

Se você quiser descobrir se está em uma página específica, postar, em um arquivo de categoria, etc., então o núcleo tem a oferecer Tags condicionais para isso.

Se você quiser enganchar uma definição de script js, a melhor maneira de fazer isso é a seguinte:

// 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' );

EDITAR

Você pode resumir / coletar todas as suas pequenas funções, que ficam em algum lugar e colocar as chamadas add_action em uma função que é carregada no primeiro gancho disponível para os temas: after_setup_theme . O importante é que os temas filho functions.php sejam carregados primeiro, depois os temas pai e, em seguida, o after_setup_theme hook. Assim, você pode deixar a possibilidade de mudar as coisas dentro do seu tema pai ou filho.

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>";
}

Mas, para responder à sua pergunta: Sim, você pode chamar todas as funções globais dentro de outra função.

    
por kaiser 20.03.2012 / 05:00