Qual è il modo migliore per sovrascrivere il CSS di un plugin?
Attualmente, uso la specificità CSS per sovrascrivere gli stili dei plugin. Preferisco questo metodo per modificare il plugin poiché causa meno problemi quando si effettuano gli aggiornamenti.
Sarebbe utile se il mio foglio di stile si caricasse dopo i plugin, così da dover essere solo altrettanto specifico, non di più. Questo renderebbe i miei fogli di stile molto più puliti.
Come suggerisci, l'approccio più elegante è quando i tuoi override CSS vengono caricati dopo il CSS iniettato dai plugin. Questo è abbastanza facile da ottenere - devi solo assicurarti che il tuo header.php
chiami wp_head()
prima di fare riferimento al tuo foglio di stile:
<head>
<!-- tutto il solito preambolo va qui -->
<?php wp_head(); ?>
<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" />
</head>

Esistono diversi modi in cui i plugin possono gestire il CSS.
- caso migliore: il plugin accoda il CSS e fornisce l'opzione per disabilitarlo (disabilitalo, copia il codice CSS nel tuo foglio di stile e sarai felice);
- buon caso: il plugin aggancia una funzione che accoda lo stile (sgancia la funzione, aggancia la tua con le modifiche se necessario);
- caso usuale: il plugin accoda il CSS direttamente. Vedi Come rimuovere uno script dalla coda? (si applica anche agli stili). Versione breve - ci sarà una funzione deque in una futura versione di WP, per ora puoi aggirare il problema con
wp_deregister_*
- caso pessimo: il plugin stampa il CSS insieme a un mucchio di altre cose. Da valutare caso per caso...
In generale, secondo me è meglio e più semplice disabilitare i fogli di stile separati e incorporarli nel tuo per minimizzare i problemi e migliorare le prestazioni (meno file da recuperare).

Un altro modo piuttosto elegante è sfruttare la specificità del CSS.
Quindi se il CSS del plugin dice:
div.product div.images img {
......
}
puoi definire nel tuo CSS:
body div.product div.images img {
......
}
Vedi anche la risposta di Michael Rader per una domanda simile.

Salvo una copia del CSS del plugin "not willing" nella cartella del tema e lo importo nel CSS del tema aggiungendo
@import url('nome-del-plugin-css.css');
ad esso (sostituendo, ovviamente, il nome del .css con quello che sto iniettando). Poi modifico la copia del css nella cartella del tema e la salvo sul server come faccio per gli altri file. Oh, sì, a volte può essere necessario "inchiodare" gli ID o le classi alterate assegnando loro un "!important".
Non so se questa sia la tecnica più avanzata, ma non fa male e funziona benissimo.

Alla fine ho utilizzato !important per il mio CSS personalizzato e questo ha sovrascritto lo stile del plugin con cui avevo problemi. Lo sviluppatore del plugin stava usando !important in tutto il CSS del plugin ed è per questo che non riuscivo a sovrascriverlo senza usare !important.
body {
font-family: "Open Sans", Arial, sans-serif !important;
font-weight: 300 !important;
}

Per sovrascrivere il CSS del plugin, che già utilizzava specificità e !important, ho usato l'ID per sovrascrivere le classi. Questo ha pulito un po' il mio codice. Naturalmente, anche questa non è una soluzione perfetta in quanto funziona solo se ci sono ID assegnati agli elementi oltre alle classi.
In teoria potresti anche usare i selettori di attributo. Tuttavia, non ho ancora messo alla prova questa teoria.

Per sovrascrivere il CSS del plugin, che già utilizzava specificità e !important, ho utilizzato l'id per sovrascrivere le classi. Questo ha pulito un po' il mio codice. Naturalmente, anche questa non è una soluzione perfetta in quanto funziona solo se ci sono id assegnati agli elementi oltre alle classi.
In teoria potresti anche utilizzare i selettori di attributo. Tuttavia, devo ancora mettere alla prova questa teoria.
