Por que wp_register_style () é importante enquanto estou usando um wp_enqueue_style () completo? [duplicado]

11

Atualmente estou trabalhando em um tema e enfileirei alguns estilos e scripts. Quando enfileirei os scripts, usei wp_register_script() primeiro e, em seguida, enfileirei com wp_enqueue_script() - porque entendi que essa é a maneira correta de enfileirar os scripts. Mas ao enfileirar os estilos, usei apenas o wp_enqueue_style() com todos os seus parâmetros. Mas agora eu tenho uma resposta de s_ha_dum dizendo que usar o wp_register_style() tornaria o tema filho amigável para o tema - Gostaria de saber, sem o wp_register_style() I está usando apenas o wp_enqueue_style() e meu tema está funcionando bem com os estilos enfileirados. Eu os enfileirei como:

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

}

Enquanto o wp_enqueue_style() tem todos os parâmetros que estão presentes em wp_register_style() ( $ identificador, $ src, $ deps, $ ver, $ media ), por que devo repeti-los? Ou, qual exatamente a finalidade de wp_register_style() diferente de wp_enqueue_style() ?

    
por Mayeenul Islam 25.11.2013 / 07:29

1 resposta

25

Antes de tudo, digamos que, com relação a essas funções, o que é válido para estilos é exatamente válido para scripts, mas há algumas exceções ao contrário explicadas na resposta.

A principal diferença entre wp_enqueue_* e respectivas funções wp_register_* , é que a primeira adiciona scripts / estilos à fila, a segunda prepara scripts / estilos a serem adicionados.

Você provavelmente já sabe disso, mas há uma segunda diferença; wp_register_* pode ser usado em cada gancho, mesmo em um gancho inicial como init , mas wp_enqueue_* deve ser usado em wp_enqueue_scripts hook (ou admin_enqueue_scripts para backend) 1 .

O cenário típico de usar ambas as funções é quando você deseja registrar scripts / estilos no tema init e, em seguida, enfileirá-los condicionalmente em algumas páginas, por exemplo,

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

Desta forma, o enfileiramento condicional é mais legível e menos detalhado.

Além disso, se você quiser enfileirar um ou mais dos estilos / scripts registrados também no backend, você pode usar o identificador registrado em uma função que engancha admin_enqueue_scripts sem ter que passar todos os parâmetros novamente.

Claro que isso é mais útil para scripts, porque wp_localize_script no cenário anterior pode ser chamado uma vez, após o registro do script e, em seguida, no enfileiramento condicional apenas enfileirar o script, mesmo que seja usado mais de uma vez: código mais simples e DRY.

Quando você registra um script / estilo e imediatamente depois de enfileirá-lo, é apenas uma tarefa desnecessária, que na verdade pode ser completamente evitada:

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

Não há nenhuma vantagem em enfileirar um estilo (ou script), assim, use wp_enqueue_style com todos os parâmetros de wp_enqueue_style e pronto.

A sentença anterior também é verdadeira em relação à amizade do tema infantil. Para sobrescrever um estilo no tema filho, quando o pai estiver usando wp_register_style imediatamente seguido por wp_enqueue_style , será necessário cancelar o registro do estilo e registrar novamente com outro URL. Se o pai estiver usando apenas wp_enqueue_style , no tema filho, você pode usar wp_dequeue_style e enfileirar o novo estilo, então, no tema filho, você precisa de duas linhas de código nos dois casos.

No entanto, o que é muito amigo do tema é agrupar as funções que enfileiram e / ou registram estilos e scripts em um if ( ! function_exists( ... dessa forma, o tema filho pode sobrescrever estilos e scripts de tema pai em um só lugar:

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

Agora, no tema filho, é possível escrever outra função my_register_styles e / ou my_enqueue_styles e alterar todos os estilos (se necessário, é claro) sem ter que cancelar o registro / desenfileiramento de estilos, um por um.

1 Aqui está outra diferença de scripts e estilos: wp_enqueue_script pode ser usado no corpo de uma página (o uso típico está em um shortcode) e o script será colocado no rodapé. / p>     

por gmazzap 25.11.2013 / 12:31