web-dev-qa-db-fra.com

Pourquoi wp_register_style () est important lorsque j'utilise un wp_enqueue_style () complet?

Actuellement, je travaille sur un thème et quelques styles et scripts ont été mis en file d'attente. Lors de la mise en file d'attente des scripts, j'ai d'abord utilisé wp_register_script(), puis en mise en file d'attente avec wp_enqueue_script() - car j'ai compris que c'était la bonne façon de mettre les scripts en file d'attente. Mais dans la mise en file d'attente des styles, je n'utilisais que la wp_enqueue_style() avec tous ses paramètres. Mais tout à l'heure, j'ai une réponse de s_ha_dum disant que l'utilisation de wp_register_style() rendrait le thème enfant-thème convivial - je me demande, sans wp_register_style(), je n'utilise que wp_enqueue_style() et mon thème fonctionne correctement avec les styles en file d'attente. Je les ai mis en file d'attente comme:

add_action( 'wp_enqueue_scripts', 'wpse20131025_styles' );

function wpse20131025_styles(){

    wp_enqueue_style( 'site-styles', get_template_directory_uri() . '/style.css', '', '', 'screen' );
    wp_enqueue_style( 'menu-styles', get_template_directory_uri() . '/css/menu.css', '', '', 'screen and (min-device-width: 800px)' );
    wp_enqueue_style( 'mobile-menu-styles', get_template_directory_uri() . '/css/mobile-menu.css', '', '', 'screen and (max-device-width: 799px)' );

}

Alors que wp_enqueue_style() a tous les paramètres présents dans wp_register_style() ( $ handle, $ src, $ deps, $ ver, $ media ), pourquoi devrais-je les répéter? Ou, quel est exactement le but de wp_register_style() autre que wp_enqueue_style()?

16
Mayeenul Islam

Tout d'abord, disons qu'en ce qui concerne ces fonctions, ce qui est valable pour les styles est exactement valable pour les scripts, mais il existe quelques exceptions au contraire expliquées dans la réponse.

La principale différence entre wp_enqueue_* et les fonctions wp_register_* respectives est que le premier ajoute des scripts/styles à la file d'attente, le second prépare scripts/styles à ajouter.

Vous le savez probablement déjà, mais il y a une deuxième différence. wp_register_* peut être utilisé dans tous les hooks, même dans les premiers hooks comme init, mais wp_enqueue_* devrait être utilisé sur wp_enqueue_scripts hook (ou admin_enqueue_scripts pour backend) 1.

Le scénario type d'utilisation des deux fonctions consiste à enregistrer des scripts/styles sur le thème init, puis à les mettre en file d'attente de manière conditionnelle sur certaines pages, par exemple.

add_action('init', 'my_register_styles');

function my_register_styles() {
    wp_register_style( 'style1', get_template_directory_uri() . '/style1.css' );
    wp_register_style( 'style2', get_template_directory_uri() . '/style2.css' );
    wp_register_style( 'style3', get_template_directory_uri() . '/style3.css' );
}

add_action( 'wp_enqueue_scripts', 'my_enqueue_styles' );

function my_enqueue_styles() {
    if ( is_front_page() ) {
        wp_enqueue_style( 'style3' );
    } elseif ( is_page_template( 'special.php' ) ) {
        wp_enqueue_style( 'style1' );
        wp_enqueue_style( 'style2' );
    } else {
        wp_enqueue_style( 'style1' );
    }
}

De cette manière, la mise en file d'attente conditionnelle est plus lisible et moins commentée.

De plus, si vous souhaitez mettre en file d'attente un ou plusieurs styles/scripts enregistrés également dans le backend, vous pouvez utiliser le descripteur enregistré dans une fonction hooking admin_enqueue_scripts sans avoir à passer tous les paramètres à nouveau.

Bien sûr, cela est plus utile pour les scripts, du fait de wp_localize_script qui, dans le scénario précédent, peut être appelé une fois, après l'enregistrement du script, puis en mise en file d'attente conditionnelle, met simplement le script en file d'attente, même s'il est utilisé plusieurs fois: le code reste ainsi plus simple et plus sec.

Lorsque vous enregistrez un script/style et immédiatement après l'avoir mis en file d'attente, il s'agit simplement d'une tâche inutile, qui peut en réalité être complètement évitée:

wp_register_style( 'style1', get_template_directory_uri() . '/style1.css' );
wp_enqueue_style( 'style1' );

Il n'y a aucun avantage à mettre un style (ou un script) dans cette situation, utilisez simplement wp_enqueue_style avec tous les paramètres de wp_enqueue_style et vous avez terminé.

Phrase précédente est également vrai en ce qui concerne l'amitié thème enfant. Pour écraser un style dans le thème enfant, lorsque le parent utilise wp_register_style immédiatement suivi de wp_enqueue_style, vous devez annuler l'enregistrement du style et vous enregistrer à nouveau avec une autre URL. Si le parent n'utilise que wp_enqueue_style, dans le thème enfant, vous pouvez utiliser wp_dequeue_style et mettre en file d'attente le nouveau style. Ainsi, dans le thème enfant, vous avez besoin de 2 lignes de code dans les deux cas.

Cependant, ce qui est très convivial avec les thèmes pour enfants, c’est d’envelopper les fonctions qui mettent en file d'attente et/ou d'enregistrer les styles et les scripts dans un if ( ! function_exists( ... de cette manière, le thème pour enfants peut écraser les styles et les scripts du thème parent au même endroit:

if ( ! function_exists( 'my_register_styles' ) ) {
    function my_register_styles() {
        wp_register_style( 'style1', get_template_directory_uri() . '/style1.css' );
        wp_register_style( 'style2', get_template_directory_uri() . '/style2.css' );
        wp_register_style( 'style3', get_template_directory_uri() . '/style3.css' );
    }
}

if ( ! function_exists( 'my_enqueue_styles ') ) {
    function my_enqueue_styles() {
        if ( is_front_page() ) {
            wp_enqueue_style( 'style3' );
        } elseif ( is_page_template( 'special.php' ) ) {
            wp_enqueue_style( 'style1' );
            wp_enqueue_style( 'style2' );
        } else {
            wp_enqueue_style( 'style1' );
        }
    }
}

Désormais, dans le thème des enfants, il est possible d'écrire une autre fonction my_register_styles et/ou my_enqueue_styles et de modifier tous les styles (si nécessaire, bien entendu) sans avoir à désenregistrer/supprimer les styles un par un.


1 Voici une autre différence entre les scripts et les styles: wp_enqueue_script peut être utilisé dans le corps d'une page (son utilisation habituelle est un shortcode) et le script sera placé dans le pied de page.

29
gmazzap