Come aggiungere stili CSS inline dinamici?

28 giu 2013, 23:07:26
Visualizzazioni: 22K
Voti: 2

Voglio aggiungere CSS dinamico, quindi attualmente lo sto aggiungendo direttamente al div, cioè:

$color = "#000000";
echo '<div style="background:'.$color.'">

È sbagliato aggiungere il codice come sopra?

Ho letto in alcuni forum che questo aumenta il carico del server e non è raccomandato dagli standard di codifica WordPress. Dovrei usare wp_add_inline_style(). Quindi sto cercando di usarlo ma non funziona. Ecco cosa sto provando:

functions.php:

function add_custom_css() {
        wp_enqueue_script('custom-css', get_template_directory_uri() . '/custom.css');          
    }
}
add_action( 'wp_enqueue_scripts', 'add_custom_css' );

single.php

$color = "#000111";
$custom_css = "
    .mycolor{
            background: {$color};
    }";

wp_add_inline_style( 'custom-css', $custom_css );

Non aggiunge alcun codice nel file custom.css. Cosa sto sbagliando?

1
Commenti

+1, ma modificato per fornire un esempio che utilizza i condizionali di query per mantenere tutto il codice di caricamento degli stili insieme.

Chip Bennett Chip Bennett
5 apr 2014 17:47:01
Tutte le risposte alla domanda 5
3
10

Prova questo:

Utilizzo dei conditional query

Inserire direttamente l'enqueue degli stili nel template non è consigliabile. È possibile (se si comprende l'ordine in cui vengono eseguite le azioni rilevanti e si assicura che la chiamata a wp_add_inline_style() avvenga nel punto giusto dell'ordine di esecuzione). Ma è molto più semplice mantenere tutto il codice insieme e utilizzare un conditional query appropriato, come is_single(), per aggiungere lo stile dinamico:

function add_custom_css() {
    wp_enqueue_style('custom-css', get_template_directory_uri() . '/custom.css');   
    // Aggiunge lo stile dinamico se viene visualizzata una pagina singola
    if ( is_single() ) {
        $color = "#000111";
        $custom_css = ".mycolor{ background: {$color}; }";
        wp_add_inline_style( 'custom-css', $custom_css );
    }
}
add_action( 'wp_enqueue_scripts', 'add_custom_css' );

Risposta Originale

functions.php

function add_custom_css() {
    wp_enqueue_style('custom-css', get_template_directory_uri() . '/custom.css');          
}
add_action( 'wp_enqueue_scripts', 'add_custom_css', 20 );

single.php

function wpse104657_custom_color() {
    $color = "#000111";
    $custom_css = "
        .mycolor{
            background: {$color};
        }";
    wp_add_inline_style( 'custom-css', $custom_css );
}
add_action( 'wp_enqueue_scripts', 'wpse104657_custom_color', 21 );

Il terzo parametro nelle chiamate add_action() è la priorità, che indica a WordPress in quale ordine eseguire l'azione — numeri più alti significano esecuzione successiva.

Modificato per aggiungere Questo non aggiungerà alcun codice a custom.css — aggiungerà solo stili inline se custom.css è già stato caricato.

Riferimenti

28 giu 2013 23:26:31
Commenti

Dovrebbe essere eseguito sull'hook wp_enqueue_styles invece?

Jack Jack
9 dic 2016 17:05:39

Non esiste un hook wp_enqueue_styles. Gli stili e gli script dovrebbero essere accodati sull'hook wp_enqueue_scripts.

Pat J Pat J
9 dic 2016 17:10:55

Ma ho aggiornato la mia risposta per usare wp_enqueue_style() invece di wp_enqueue_script() per accodare il foglio di stile. Grazie.

Pat J Pat J
9 dic 2016 17:14:16
0

Non aggiunge alcun codice nel file custom.css. Cosa sto sbagliando?

Quegli stili vengono aggiunti nel documento HTML, all'interno dei tag <style>, non nel foglio di stile che hai accodato. Devi comunque accodare il foglio di stile prima di aggiungere gli stili "inline".

Il nome della funzione è un po' confuso, perché produce blocchi di stile, non veri e propri stili inline. Quello che hai fatto con il DIV sopra è uno stile inline. Dovresti evitarli perché hanno la precedenza più alta prima delle regole !important (sarebbe molto difficile sovrascriverli).

Ho letto in qualche forum che aumenta il carico sul server

No, non è così. Probabilmente lo stai confondendo con gli script PHP che fungono da fogli di stile. Questi sì che sono dannosi.

28 giu 2013 23:26:48
0

Forse è solo una mia impressione, ma mi sembra che stiamo facendo un dramma per un nonnulla. (è un modo di dire... cercalo :) )

Se stai costruendo un tema che potrebbe avere un child theme associato, sia aggiungendolo direttamente inline, sia aggiungendolo a un blocco di stile tramite wp_add_inline_style(), sarà necessario usare !important per sovrascriverlo.

Se si tratta di un plugin personalizzato e cambiare il colore di sfondo è una parte fondamentale della funzionalità, allora senza dubbio, aggiungilo inline.

Non vedo alcun vantaggio nel complicare eccessivamente questa cosa.

Per rispondere alla domanda originale.

È sbagliato aggiungere codice come quello sopra?

La risposta semplice è: No, non è sbagliato. Ha delle conseguenze, ma le prestazioni del server non sono una di queste, e non vedo nulla negli standard di codifica di WordPress che lo sconsigli. In generale, gli stili inline dovrebbero essere usati con parsimonia e attenzione, ma non sono sbagliati.

Se vuoi assicurarti di mantenere separati i concetti, potresti aggiungere una classe inline invece degli stili.

$color = "black";
echo '<div class=".$color.">'

E poi definire .black nel tuo foglio di stile. (Questo, ovviamente, funziona solo se hai una lista predefinita di opzioni di colore.)

1 set 2016 19:39:01
0

Basta utilizzare:

add_action('admin_head','myfunc24235235');
function myfunc24235235(){ ?>

  <style>
  .smth{ color:red;}
  </style>

    <?php
}
1 set 2016 16:35:23
0

Faccio questo in tutti i miei template, uso:

<?php
    function hook_css() {
        ?>
            <style>
                .sub { margin: auto; max-width: 1140px;}
            </style>
        <?php
    }
    add_action('wp_head', 'hook_css');
?>

Questo inserirà i tag di stile e gli stili referenziati nella sezione head al completamento di

<?php wp_head();?>

Se lo stai codificando in un template, assicurati di inserirlo prima della sezione

<?php wp_head();?>. Puoi saperne di più qui WordPress Codex

9 set 2017 23:27:14