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

11

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() , parce que c'est la bonne façon de mettre les scripts en file d'attente. Mais dans la mise en file d'attente des styles, je n'ai utilisé que le wp_enqueue_style() avec tous ses paramètres. Mais tout à l'heure, une réponse de s_ha_dum disait que l'utilisation de wp_register_style() ferait du thème enfant un thème convivial - Je me demande, sans le wp_register_style() , je n'utilise que le wp_enqueue_style() et mon thème fonctionne correctement avec les styles mis 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() ?

    
posée Mayeenul Islam 25.11.2013 - 07:29

1 réponse

25

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 respectives wp_register_* est que le premier ajoute des scripts / styles à la file d'attente, le second prépare les styles / styles à ajouter.

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

Le scénario typique 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 détaillé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 accrochant admin_enqueue_scripts sans avoir à passer tous les paramètres à nouveau.

Bien sûr, cela est plus utile pour les scripts, car wp_localize_script permet dans le scénario précédent de ne pouvoir être appelé qu'une fois, après l'enregistrement du script, puis lors de la mise en file d'attente conditionnelle, il suffit de mettre le script en file d'attente, même s'il est utilisé plus d'une fois: code plus simple et 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 en file indienne un style (ou un script), utilisez simplement wp_enqueue_style avec tous les paramètres de wp_enqueue_style et vous avez terminé.

La phrase précédente est également vraie en ce qui concerne l'amitié sur le thème de l'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 désenregistrer le style et vous enregistrer à nouveau avec une autre URL. Si le parent n'utilise que wp_enqueue_style , vous pouvez utiliser wp_dequeue_style dans le thème enfant et mettre en file d'attente le nouveau style. 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 le thème enfant, c’est d’emballer 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 enfant 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' );
        }
    }
}

Maintenant, dans le thème enfant, 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 sûr) 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 typique est un shortcode) et le script sera placé dans le pied de page.

    
réponse donnée gmazzap 25.11.2013 - 12:31

Lire d'autres questions sur les étiquettes