Cum să injectezi CSS inline în functions.php
Încerc să injectez un stil CSS inline pentru elementul body prin fișierul functions.php. Acesta trebuie să fie inline, deoarece folosesc ACF pentru a permite utilizatorului să schimbe imaginea.
Acesta ar trebui să fie rezultatul:
<body style="background-image: url('<?php the_field('background'); ?>');">
Am citit despre wp add inline style, dar nu am reușit să îmi dau seama cum să implementez.
Actualizare: Iată funcția pe care am încercat-o:
function wpdocs_styles_method() {
wp_enqueue_style('custom-style', get_stylesheet_directory_uri() . '/body.css'
);
$img = get_theme_mod( "<?php the_field('background') ?>" );
$custom_css = "body {background-image: {$img}";
wp_add_inline_style( 'custom-style', $custom_css );
}
add_action( 'wp_enqueue_scripts', 'wpdocs_styles_method' );
Am încărcat un fișier body.css pentru a încerca să adaug CSS-ul inline. Dar nu a funcționat - poate că aceasta nu este abordarea corectă?

Cea mai ușoară metodă pe care am văzut-o este să o echo
unde ai nevoie de ea:
function inline_css() {
echo "<style>html{background-color:#001337}</style>";
}
add_action( 'wp_head', 'inline_css', 0 );
Începând din 2019, poți adăuga și stiluri inline în interiorul tag-ului body
, arătat aici fără a folosi echo
:
function example_body_open () { ?>
<style>
html {
background-color: #B4D455;
}
</style>
<?php }
add_action( 'wp_body_open', 'example_body_open' );
Avantajul aici este că obții o evidențiere mai bună a sintaxei și nu este nevoie să escapi ghilimelele duble. Reține că acest hook particular va funcționa doar cu teme care implementează wp_body_open
hook.

Stilurile inline sunt stiluri care sunt scrise direct în eticheta din document și acesta este ceea ce cauți.
Totuși, wp_add_inline_style
va adăuga o porțiune suplimentară de CSS în secțiunea <head>
a documentului (stil încorporat), nu în eticheta de stil HTML.
Deci, dacă dorești să plasezi valoarea CSS direct în marcajul HTML prin intermediul unei etichete de stil, atunci wp_add_inline_style
nu va face asta pentru tine. Ar trebui fie să transmiți valoarea lui get_field
către o etichetă de stil HTML în fișierele tale de șablon, fie să iei în considerare utilizarea JavaScript.
<div style="<?php the_field( 'some-field' ) ?>">
</div>

poate aceasta nu este abordarea corectă deloc?
wp_add_inline_style adaugă stiluri CSS suplimentare unui fișier de stiluri înregistrat. Această funcție nu va adăuga un stil inline html în tag-ul body.
Totuși, eu cred că aceasta este abordarea corectă pentru problema ta. Practic faci bine, dar trebuie să adaugi atât CSS inline cât și o altă clasă pentru body, astfel încât CSS-ul să aibă efect.
/**
* Adaugă condițional o clasă body și CSS inline
*/
//* Adaugă acțiune la wp_loaded pentru inițializarea pluginului
add_action( 'wp_loaded', 'wpse_106269_wp_loaded' );
function wpse_106269_wp_loaded() {
add_action( 'wp_enqueue_scripts', 'wpse_106269_enqueue_scripts' );
//* Adaugă hook-uri condițional
if( '' !== get_theme_mod( 'my-mod', '' ) ) {
add_filter( 'body_class', 'wpse_106269_body_class' );
add_action( 'wp_enqueue_scripts', 'wpse_106269_add_inline_style' );
}
}
//* Asigură încărcarea CSS-ului personalizat.
function wpse_106269_enqueue_scripts() {
wp_enqueue_style( 'custom-style', '/style.css' );
}
//* Adaugă o clasă suplimentară tag-ului body.
function wpse_106269_body_class( $classes ) {
$classes[] = 'custom-background-image';
return $classes;
}
//* Adaugă background-image inline
function wpse_106269_add_inline_style() {
$background_url = esc_url( get_theme_mod( 'my-mod', '' ) );
$custom_css = ".custom-background-image { background-image:URL( $background_url ); }";
wp_add_inline_style( 'custom-style', $custom_css );
}
