Dans ce chapitre nous allons évoquer un premier point clef de WordPress : Les hooks. Ces hooks permettent d'étendre WordPress depuis un thème ou un plugin en injectant des fonctionnalités lors de moment clef.

Fonctionnement

Pour ajouter une opération à effectuer lors de l’exécution d'un hook il vous suffit d'utiliser la fonction do_action(). Dans le cas d'un thème, les hooks seront définit dans le fichier functions.php mais libre à vous de les organiser comme bon vous semble.

function montheme_register_assets()
{
    wp_register_style('bootstrap', 'https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css', []);
    wp_register_script('bootstrap', 'https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js', ['popper', 'jquery'], false, true);
    wp_register_script('popper', 'https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js', [], false, true);
    wp_deregister_script('jquery');
    wp_register_script('jquery', 'https://code.jquery.com/jquery-3.2.1.slim.min.js', [], false, true);
    wp_enqueue_style('bootstrap');
    wp_enqueue_script('bootstrap');
}
add_action('wp_enqueue_scripts', 'montheme_register_assets');

L'action wp_enqueue_scripts permet par exemple d'enregistrer de nouveaux éléments javascript ou css à charger. Vous pouvez en apprendre plus sur l'ordre d'éxécutions des actions en vous rendant sur cette page de la documentation. L'ensemble des hooks sont quant à eux listé dans la partie Code Reference de la documentation.

Vous pouvez aussi passer un troisième paramètre pour définir la "priorité" de votre action. Ceci permet à WordPress de savoir dans quelle ordre lancer les différentes actions. Enfin le 4ème argument permet de spécifier le nombre d'arguments attendus par la méthode de rappel.

Un autre hook intéréssant est le hook after_setup_theme qui vous permettra d'enregistrer des informations sur le fonctionnement de votre thème.

function montheme_supports()
{
    add_theme_support('title-tag');
    add_theme_support('post-thumbnails');
    add_theme_support('menus');
    register_nav_menu('header', 'En tête du menu');
    register_nav_menu('footer', 'Pied de page');

    add_image_size('post-thumbnail', 350, 215, true);
}
add_action('after_setup_theme', 'montheme_supports');