add_action dans une fonction, est-ce possible?

4

J'essaie d'ajouter quelques js à la tête en utilisant add_action('wp_head', 'js_func'); qui fonctionne juste après la fonction. Cependant, je ne veux pas qu'elle soit affichée sur toutes les pages, mais uniquement sur la page à laquelle elle correspond et que j'essaie de faire. comme si

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

Cependant, quand il s'appelle comme si le js n'était pas placé du tout, casserait donc la page.

Est-il possible de faire cela?

    
posée Joshua 20.03.2012 - 04:37

1 réponse

5

Si vous voulez savoir si vous êtes sur une page, une publication, une archive de catégorie, etc., le noyau doit offrir Balises conditionnelles pour cela.

Si vous souhaitez associer une définition de script js, procédez comme suit:

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

MODIFIER

Vous pouvez résumer / rassembler toutes vos petites fonctions, qui sont accrochées quelque part et mettre les appels add_action dans une fonction qui est chargée sur le premier hook disponible pour les thèmes: after_setup_theme . L'important est que les thèmes enfants functions.php soient chargés en premier, puis les thèmes parents, puis le crochet after_setup_theme . Vous pouvez donc laisser la possibilité de changer des choses de l'intérieur de votre thème parent ou enfant.

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

Mais pour répondre à votre question, vous pouvez appeler chaque fonction globale dans une autre fonction.

    
réponse donnée kaiser 20.03.2012 - 05:00

Lire d'autres questions sur les étiquettes