Cum să adaugi stiluri inline dinamice?

28 iun. 2013, 23:07:26
Vizualizări: 22K
Voturi: 2

Vreau să adaug CSS dinamic, așa că momentan îl adaug direct în div, adică:

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

Este greșit să adaug codul în acest mod?

Am citit pe câteva forumuri că acest lucru adaugă o povară serverului și nu este recomandat de standardele de codare WordPress. Ar trebui să folosesc wp_add_inline_style(). Așa că încerc să folosesc asta, dar nu funcționează. Iată ce încerc:

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

Nu adaugă niciun cod în fișierul custom.css. Ce fac greșit?

1
Comentarii

+1, dar editat pentru a oferi un exemplu care folosește condiționale de interogare pentru a păstra toate codurile de încărcare a stilurilor împreună.

Chip Bennett Chip Bennett
5 apr. 2014 17:47:01
Toate răspunsurile la întrebare 5
3
10

Încearcă asta:

Folosind condiționale de interogare

Nu este recomandat să adaugi stiluri direct în template. Este posibil (dacă înțelegi ordinea în care acțiunile relevante sunt declanșate și te asiguri că apelul tău către wp_add_inline_style() se întâmplă în momentul potrivit din ordinea de execuție). Este mult mai ușor să păstrezi tot codul împreună și să folosești o condițională de interogare adecvată, cum ar fi is_single(), pentru a adăuga stilul dinamic:

function add_custom_css() {
    wp_enqueue_style('custom-css', get_template_directory_uri() . '/custom.css');   
    // Adaugă stil dinamic dacă este afișată o pagină singulară
    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' );

Răspunsul Original

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

Al treilea parametru din apelurile add_action() reprezintă prioritatea, care spune WordPress în ce ordine să adauge acțiunea - numere mai mari înseamnă execuție mai târzie.

Editat pentru a adăuga Acest lucru nu va adăuga niciun cod în custom.css - va adăuga doar stiluri inline dacă custom.css a fost deja încărcat.

Referințe

28 iun. 2013 23:26:31
Comentarii

Ar trebui să ruleze pe hook-ul wp_enqueue_styles în schimb?

Jack Jack
9 dec. 2016 17:05:39

Nu există un hook wp_enqueue_styles. Stilurile și scripturile ar trebui încărcate pe hook-ul wp_enqueue_scripts.

Pat J Pat J
9 dec. 2016 17:10:55

Dar am actualizat răspunsul meu pentru a folosi wp_enqueue_style() în loc de wp_enqueue_script() pentru a încărca fișierul de stil. Mulțumesc.

Pat J Pat J
9 dec. 2016 17:14:16
0

Nu adaugă niciun cod în fișierul custom.css. Ce fac greșit?

Acele stiluri sunt adăugate în documentul HTML, între tag-urile <style>, nu în fișierul de stiluri pe care l-ai încărcat (enqueued). Totuși, este necesar să încarci fișierul de stiluri înainte de a adăuga stilurile "inline".

Denumirea funcției este puțin confuză, deoarece produce blocuri de stiluri, nu stiluri inline propriu-zise. Ceea ce ai făcut cu DIV-ul de mai sus este un stil inline. Ar trebui să eviți acestea deoarece au cea mai mare prioritate înainte de regulile !important (ar fi foarte dificil să le suprascrii).

Am citit pe un forum că adaugă încărcare pe server

Nu, nu adaugă. Probabil confunzi acest lucru cu scripturile PHP care funcționează ca fișiere de stiluri. Acelea sunt problematice.

28 iun. 2013 23:26:48
0

Poate sunt doar eu, dar simt că ne chinuim cu un tantar și înghițim o cămilă, aici. (e o expresie... poți să o cauți :) )

Dacă construiești o temă care ar putea avea o temă copil asociată, atât adăugarea direct inline, cât și adăugarea într-un bloc de stil prin wp_add_inline_style() va necesita !important pentru a o suprascrie.

Dacă acesta este un plugin personalizat, iar schimbarea culorii de fundal este o parte critică a funcționalității, atunci, desigur, adaugă-l inline.

Nu văd niciun avantaj în a complica în mod excesiv acest lucru.

Pentru a răspunde la întrebarea inițială.

Este rău să adaugi cod ca cel de mai sus?

Răspunsul simplu este, Nu, nu este rău. Are consecințe, dar performanța serverului nu este una dintre ele și nu văd nimic în standardele de codare WordPress care să descurajeze acest lucru. În general, stilurile inline ar trebui folosite cu moderație și cu grijă, dar nu sunt rele.

Dacă vrei să te asiguri că separi corect preocupările, ai putea adăuga o clasă inline în loc de stiluri.

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

Și apoi definești .black în fișierul tău de stil. (Desigur, asta funcționează doar dacă ai o listă predefinită de opțiuni de culori.)

1 sept. 2016 19:39:01
0

Folosește pur și simplu:

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

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

    <?php
}
1 sept. 2016 16:35:23
0

Eu fac asta în toate șabloanele mele, folosesc:

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

Aceasta va plasa tag-urile de stil și stilurile referențiate în secțiunea head la finalizare

<?php wp_head();?>

Dacă o încorporezi într-un șablon, asigură-te că o plasezi înainte de secțiunea

<?php wp_head();?>. Poți afla mai multe despre asta aici WordPress Codex

9 sept. 2017 23:27:14