Usando wp_add_inline_style sin una hoja de estilos

19 nov 2014, 12:26:24
Vistas: 41.5K
Votos: 32

Necesito agregar estilos en línea personalizados en el encabezado de un tema personalizado que estoy creando. Me he encontrado con la función wp_add_inline_style(), que funciona pero realmente no me sirve ya que depende de una hoja de estilos específica. Necesitaría agregar estilos en línea al final de la etiqueta head sin una dependencia de hoja de estilos.

He intentado establecer tanto la hoja de estilos del tema como una que no existe. En ambos casos, funciona pero es un poco un hack sucio en mi opinión (ya sea cargar la hoja de estilos del tema dos veces o hacer referencia a un archivo fantasma...). ¿Hay una forma correcta de agregar estilos en línea en el head sin depender de una hoja de estilos?

Por supuesto, podría agregarlos directamente en el archivo header.php pero me gustaría evitar esto.

0
Todas las respuestas a la pregunta 3
5
41

Podrías simplemente usar un handle "ficticio":

wp_register_style( 'dummy-handle', false );
wp_enqueue_style( 'dummy-handle' );

wp_add_inline_style( 'dummy-handle', '* { color: red; }' );
14 oct 2017 03:42:33
Comentarios

Me gusta mucho esta solución porque mi estilo tiene un handle y se encola como si estuviera incluido desde un archivo .css.

dev_masta dev_masta
7 nov 2018 13:33:10

Usar false como el origen de wp_register_style tampoco está permitido según la documentación https://codex.wordpress.org/Function_Reference/wp_register_style#Parameters

16patsle 16patsle
13 feb 2019 14:56:59

@16patsle - No estoy seguro de que tengas razón. Si usas false la hoja de estilo es un alias de otras hojas de estilo de las que depende. Eso es todo.

kanlukasz kanlukasz
25 oct 2020 17:21:59

Supongo que la documentación se actualizó desde que publiqué ese comentario, ahora parece estar permitido. (No creo que pasar false sin dependencias esté explícitamente permitido, pero supongo que probablemente aún funciona)

16patsle 16patsle
26 oct 2020 18:51:10

A partir de hoy (septiembre 2022) la documentación ha sido movida a https://developer.wordpress.org/reference/functions/wp_register_style/ y ahora explícitamente aprueba esta técnica de establecer la fuente como 'false' con la siguiente explicación: "Si la fuente se establece como false, la hoja de estilo es un alias de otras hojas de estilo de las que depende."

ChrisM ChrisM
15 sept 2022 04:37:52
5
39

Solo necesitas agregar los estilos directamente en el head de la página. La mejor manera de hacer esto es usando el action hook 'wp_head', asumiendo que estás usando un tema que tenga este hook. Así:

add_action('wp_head', 'my_custom_styles', 100);

function my_custom_styles()
{
 echo "<style>*{color: red}</style>";
}

Consulta el WP codex para aprender más sobre los action hooks.

19 nov 2014 16:39:40
Comentarios

¡No hay problema! Me alegra poder ayudar.

SkyShab SkyShab
19 nov 2014 22:28:53

Si (como yo) quieres añadir CSS personalizado en línea a las páginas del panel de control, puedes usar la acción admin_head.

That Brazilian Guy That Brazilian Guy
29 ene 2018 16:05:44

@SkyShab ¿por qué hay un asterisco después de style>

Michael Rogers Michael Rogers
10 ago 2020 21:13:04

@MichaelRogers son solo estilos CSS de ejemplo. El "*" es un "selector universal". Esto haría que todos los elementos tengan el color rojo.

SkyShab SkyShab
21 ago 2020 19:34:46

oh, jaja gracias

Michael Rogers Michael Rogers
22 ago 2020 04:54:56
3

Tu tema casi seguro tiene una hoja de estilos por defecto (de lo contrario ni siquiera se cargaría como un tema). Simplemente usa esta misma hoja de estilos como manejador para tu CSS inline. Un ejemplo se puede encontrar en el functions.php del tema TwentyFifteen (código omitido por brevedad):

function twentyfifteen_scripts() {
    wp_enqueue_style( 'twentyfifteen-style', get_stylesheet_uri() );

}
function twentyfifteen_post_nav_background() {
    wp_add_inline_style( 'twentyfifteen-style', $css );
}
17 ago 2017 07:40:41
Comentarios

El OP específicamente pidió un método diferente a usar wp_add_inline_style(). Ambos métodos funcionan, y no he encontrado una razón convincente para usar wp_add_inline_style(). Si conoces alguna razón, me gustaría saberla.

SkyShab SkyShab
30 ene 2018 17:24:31

Tu solución funciona, pero sigue siendo un "hack" según algo que escuché de alguien del equipo de WP alguna vez (si no me equivoco); no es exactamente mi opinión. Creo que el OP pensaba que no había manera de hacer esto sin cargar la hoja de estilos dos veces o usar un hook fantasma. De todos modos, si no están desarrollando un plugin, siempre hay una hoja de estilos del tema disponible. También estoy editando mi respuesta ya que tu solución está documentada en el Codex. :)

Casper Casper
30 ene 2018 21:37:39

Experimenté con wp_add_inline_style(), y esto es lo que descubrí. La ventaja de adjuntar los estilos a una hoja de estilos es que si se desencola, los estilos no se imprimirán. Pero cualquiera de los métodos los imprime en línea en el head. Digamos que eres un desarrollador de plugins y tus estilos se imprimen en el head. Esto no tiene nada que ver con los estilos del tema, así que si un tema hijo desencola los estilos principales del tema para usar los suyos, ahora los estilos de tu plugin no se están mostrando. Por lo tanto, el OP pudo haber especificado esa parte de la solicitud por esta razón.

SkyShab SkyShab
31 ene 2018 22:47:28