2012-06-05 3 views
7

Ho scritto un semplice plugin che imposta un codice css usando wp_options. Sembra tutto simile come questo:Aggiungi CSS a Php Plugin Wordpress

add_action('init','easy_style'); 

function easy_style() 
{ 
    ?> 
    <style> 
    #header a { 
     color: <?php echo get_option('topcolor'); ?>; 
     font-size: <?php echo get_option('topsize'); ?>px; 
     <?php 
      if (get_option('topstyle') == "bold") 
      { echo "font-weight: bold;"; echo "font-style: normal;"; } 
      elseif (get_option('topstyle') == "italic") 
      { echo "font-style: italic;"; echo "font-weight: normal;"; } 
      elseif (get_option('topstyle') == "bolditalic") 
      { echo "font-weight: bold;"; echo "font-style: italic;"; } 
      else { echo "font-weight: normal;"; echo "font-style: normal;"; } 
     ?>; 
    } 

    </style> 
    <?php 
} 

Ora questo funziona, ma se posso attivare la mia "Modulo di contatto 7" plug-in, il modulo di contatto 7 non funziona più. Non può inviare messaggi. Quindi penso che quello che faccio sia sbagliato. Se rimuovo questo pezzo di codice, il modulo di contatto funziona di nuovo ...

Penso di sbagliarmi perché il css deve essere caricato nell'intestazione, no? Quindi quello che pensavo di fare come test è inserire lo stesso codice nell'intestazione. Comunque alcuni altri css (non so dove) li sovrascrivono, quindi anche questo non funziona.

Penso che ci siano alcune funzioni di wp per aggiungere codice css all'intestazione ma non so quanto sia esatto.

Qualche idea?

Grazie

+0

questa risposta http://stackoverflow.com/a/38050537/1153703 –

risposta

-11

ho risolto il mio problema caricando nel file styles.css, modificarlo e salvare di nuovo

+0

Devi davvero passare all'utilizzo dello stile enqueu. Questo lascerà il tuo plugin più forte e meno probabile che si interrompa quando escono nuove versioni di WP. – MattK

2

Forse il plugin che si sta utilizzando vuole mandare alcuni header HTTP.

Dal momento che si sta utilizzando il gancioinit (descritto qui: http://codex.wordpress.org/Plugin_API/Action_Reference/init) si esegue alcune azioni quando gli sviluppatori di plugin ritengono che le intestazioni non sono già inviati.

Ma dal momento che si invia un output (echo alcuni stili) si stanno forzando le intestazioni da inviare prima. Ti suggerisco di utilizzare un altro hook che si verifica dopo che l'output è già stato avviato.

Aggiornamento: è possibile utilizzare la funzione wp_enqueue_style (riferimento qui: http://codex.wordpress.org/Function_Reference/wp_enqueue_style) in quanto è il metodo consigliato per visualizzare gli stili. Hai solo bisogno di salvare quelle regole in un file css e fare un accodamento per caricarlo prima che la funzione wp_head sia chiamata

+0

Questo mi ha aiutato a risolvere il problema! Hai ragione, il "init" è il problema. L'ho cambiato in "wp_loaded" e ora il modulo di contatto funziona di nuovo. Molte grazie! :) – WtFudgE

+0

Sembra che mi sia sbagliato, ha funzionato localmente, ma sul mio host ottengo: Impossibile modificare le informazioni di intestazione - intestazioni già inviate da (output avviato su /home/gnc0081000/domains/claeysparts.be/public_html/wp-content /plugins/easy-styler.php:18) in /home/gnc0081000/domains/claeysparts.be/public_html/wp-includes/pluggable.php alla linea 866 – WtFudgE

+0

@WtFudgE è esattamente la stessa cosa, basta leggere il messaggio di errore. stai stampando qualcosa prima di usare la funzione di intestazione. È la stessa cosa che ho detto sopra, ma in una parte dello script a cui non ho accesso, ma il messaggio di errore indica dove si trova l'errore: in /home/gnc0081000/domains/claeysparts.be/public_html/wp- content/plugins/easy-styl ER.php alla riga 18 – mishu

23

Un modo sicuro per aggiungere CSS al tuo plugin è usare wp_enqueue_style.

/** 
* Register with hook 'wp_enqueue_scripts', which can be used for front end CSS and JavaScript 
*/ 
add_action('wp_enqueue_scripts', 'prefix_add_my_stylesheet'); 

/** 
* Enqueue plugin style-file 
*/ 
function prefix_add_my_stylesheet() { 
    // Respects SSL, Style.css is relative to the current file 
    wp_register_style('prefix-style', plugins_url('style.css', __FILE__)); 
    wp_enqueue_style('prefix-style'); 
} 

Reference.

+0

Ho provato a scrivere su un file css e quindi a registrarlo usando il tuo codice. Carica il file CSS, tuttavia sembra che abbia gli stessi problemi di prima. È lo stesso di quando lo inserisco nel file di intestazione. – WtFudgE

+0

Ho notato che alcuni dei codici CSS funzionano, ma alcuni non lo sono. Ad esempio, font-size e font-weight sui collegamenti dei menu funzionano, ma il colore non sembra cambiare. Qualche idea? – WtFudgE

+0

Questo sarà dovuto al fatto che il tuo modello CSS sta sovrascrivendo il tuo plugin CSS. Dai un'occhiata all'ordine di inclusione e specificità CSS: http://www.w3.org/TR/CSS2/cascade.html#specificity – MrCode

-1

In un plugin dev, non dimenticate di inviare il riferimento del controllo class ($this)

add_action('wp_enqueue_scripts', array($this,'prefix_add_my_stylesheet'));