La risposta è sì, le funzioni di theme_mod saranno più lente, ma non significative, e i benefici superano le differenze.
Le mod del tema sono memorizzate come opzioni. Quindi, in sostanza, le funzioni theme_mod sono involucri attorno alle funzioni delle opzioni.
Innanzitutto, capire che le impostazioni di theme_mod sono memorizzate come una matrice in un'unica opzione, codificata per il nome specifico del tema. Quindi, se lo faccio:
set_theme_mod('aaa',123);
set_theme_mod('bbb',456);
Quindi quello che ottengo effettivamente nel database è una singola riga di opzioni con il nome di theme_mods_themename che contiene un array serializzato con ('aaa' => 123, 'bbb' => 456).
Ora get_theme_mod
sarà più lento perché in realtà sta effettuando due get_option
chiamate. Innanzitutto, ottiene il nome del tema. Quindi, ottiene iltheme_mods_themename
opzione. Quindi proprio lì c'è una perdita di velocità del 50%. Il resto del lavoro svolto risiede principalmente nei filtri, in quanto esiste una chiamata di filtro aggiuntiva, ma a meno che tu non abbia qualcosa su quel filtro, questo è un po 'insignificante.
Si noti che il sistema di opzioni archivia i dati recuperati nella cache degli oggetti, quindi non effettua più chiamate al database qui. Solo il primo utilizzo provoca un hit nel database.
Il set_theme_mod
sarà po 'più lento perché rende quegli stessi due chiamate opzioni GET, poi fa un'altra get_option
chiamata per ottenere di nuovo il nome del tema, e poi lo fa update_option
con la serie completa di opzioni ora è cambiato. Ciò provoca un aggiornamento del database e il fatto che stia inviando molti più dati può effettivamente essere la causa di un notevole rallentamento. L'aggiornamento di pochi byte è più rapido dell'aggiornamento di una riga più grande. Ma non tanto quanto noteresti, di solito. A meno che tu non abbia un sacco di impostazioni ...
Le funzioni di modifica del tema sono probabilmente dovute all'ottimizzazione complessiva, certamente, ma tuttavia dovresti comunque usarle al posto di get_option e perché temi figlio.
Il problema con l'utilizzo diretto delle righe delle opzioni è che le stai usando direttamente e usando nomi chiave specifici per le tue impostazioni.
Se ho un tema chiamato "AAA" e ne creo un tema figlio chiamato "BBB" da utilizzare su un altro sito, il mio tema "AAA" potrebbe utilizzare un'opzione denominata "esempio". Quando aggiorno un sito e aggiorna la mia opzione, la stessa opzione verrà ora applicata al tema di mio figlio. E se non volessi che lo facesse? E se volessi che il tema figlio usasse un diverso set di impostazioni delle opzioni?
Le mod del tema, includendo il nome del tema effettivo (e non un valore codificato) come parte della chiave assicurano che ogni "tema" sul sito utilizzi il proprio set di impostazioni. Posso passare avanti e indietro e le impostazioni non si trasferiscono tra loro, rimangono come le ho impostate. Più semplice, più ovvio, più intuitivo.
E se qualche cambiamento o plug-in futuro modificherà il modo in cui theme_mods funzionerà, allora otterrai automaticamente i vantaggi di questo senza alcuna modifica. Gli involucri saranno sempre più lenti, questo è inevitabile, è la natura degli involucri. Tuttavia, stai ancora scrivendo il codice PHP, non il linguaggio macchina. Utilizziamo involucri come questo per semplificare le cose e separare le funzionalità. I temi non dovrebbero avere bisogno di sapere o preoccuparsi di come le loro opzioni sono archiviate nel database o di come funziona la denominazione. Le funzioni theme_mod forniscono una soluzione più semplice che è più pulita.
/wp-includes
aoption.php
doveget_option()
è definito e atheme.php
doveget_theme_mod()
è definito, puoi vedere che quest'ultimo si chiama effettivamenteget_option()
, agendo come un'estensione di esso che applica anche tutti i filtri necessari. Potrebbe spiegare perché è più lento.