¿Por qué wp_register_style () es importante mientras uso un wp_enqueue_style () completo? [duplicar]

11

Actualmente estoy trabajando en un tema, e hice algunos estilos y secuencias de comandos en cola. Cuando pongo en cola los scripts, usé wp_register_script() primero, y luego encolado con wp_enqueue_script() , porque tengo esa es la forma correcta de poner en cola los scripts. Pero al poner en cola los estilos, usé solo el wp_enqueue_style() con todos sus parámetros. Pero justo ahora recibí una respuesta de s_ha_dum que dice que usar wp_register_style() haría que el tema del tema sea amigable con el tema - Me pregunto, sin el wp_register_style() I usando solo el wp_enqueue_style() y mi tema funciona bien con los estilos en cola. Los encoé 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)' );

}

Si bien wp_enqueue_style() tiene todos los parámetros presentes en wp_register_style() ( $ handle, $ src, $ deps, $ ver, $ media ), ¿por qué debería repetirlos? O, ¿cuál es exactamente el propósito de wp_register_style() que no sea wp_enqueue_style() ?

    
pregunta Mayeenul Islam 25.11.2013 - 07:29

1 respuesta

25

Primero que todo, digamos que con respecto a estas funciones, lo que es válido para los estilos es exactamente válido para los scripts, pero hay algunas excepciones a lo contrario explicadas en la respuesta.

La principal diferencia entre las funciones wp_enqueue_* y respectivas wp_register_* , es que la primera agrega secuencias de comandos / estilos a la cola, la segunda prepara las secuencias de comandos / estilos que se agregarán.

Probablemente ya lo sepas, pero hay una segunda diferencia; wp_register_* se puede usar en todos los ganchos, incluso en un gancho temprano como init , pero wp_enqueue_* se debe usar en wp_enqueue_scripts hook (o admin_enqueue_scripts para backend) 1 .

El escenario típico de uso de ambas funciones es cuando desea registrar scripts / estilos en el tema init, y luego ponerlos en forma condicional en algunas páginas, por ejemplo

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 esta manera, la puesta en cola condicional es más legible y menos detallada.

Además, si desea poner en cola uno o más de los estilos / scripts registrados también en el backend, puede usar el manejador registrado en una función que enlaza coxde admin_enqueue_scripts sin tener que pasar todos los parámetros nuevamente.

Claro, esto es más útil para los scripts, debido a wp_localize_script que en el escenario anterior se puede llamar una vez, después del registro del script, y luego en la puesta en cola condicional solo encola el script, incluso si se usa más de una vez: esto se mantiene Código más sencillo y SECO.

Cuando registra un estilo / secuencia de comandos e inmediatamente después de ponerlo en cola, es solo una tarea innecesaria, que en realidad se puede evitar por completo:

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

No hay ninguna ventaja en poner en cola un estilo (o script) de esta manera, solo usa wp_enqueue_style con todos los parámetros de wp_enqueue_style y listo.

La oración anterior también es cierta con respecto al tema de la amistad infantil. Para sobrescribir un estilo en el tema secundario, cuando el padre usa wp_register_style inmediatamente seguido por wp_enqueue_style , debe cancelar el registro del estilo y registrarse de nuevo con otra URL. Si el padre solo usa wp_enqueue_style , en el tema hijo puede usar wp_dequeue_style y encolar el nuevo estilo, por lo tanto, en el tema secundario necesita 2 líneas de código en ambos casos.

Sin embargo, lo que es muy amigable con el tema infantil es envolver las funciones que ponen en cola y / o registrar estilos y secuencias de comandos en un if ( ! function_exists( ... de esta manera, el tema secundario puede sobrescribir los estilos de los temas principales y las secuencias de comandos en un solo 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' );
        }
    }
}

Ahora, en el tema secundario, es posible escribir otra función my_register_styles y / o my_enqueue_styles y cambiar todos los estilos (si es necesario, por supuesto) sin tener que cancelar el registro de los estilos uno a uno.

1 Aquí hay otra diferencia con los scripts y estilos: wp_enqueue_script se puede usar en el cuerpo de una página (el uso típico está en un shortcode) y el script se colocará en el pie de página.

    
respondido por el gmazzap 25.11.2013 - 12:31

Lea otras preguntas en las etiquetas