2012-01-24 14 views
7

Inizio nuovi progetti scrivendo un tema figlio per il tema del ventesimo. Raramente disegno il nuovo tema per utilizzare una delle opzioni integrate nel tema del ventesimo (come il colore di sfondo, ecc.). Quelle opzioni residuali non fanno davvero male a nessuno, ma mi piacerebbe sbarazzarmene perché non fanno nulla.Come rimuovere le opzioni del tema Wordpress dal tema figlio

Il problema è che le opzioni del tema sono dichiarate in functions.php del tema principale, che viene caricato insieme al file functions.php (non al posto di) del tema del bambino (quindi potrei eliminarli ma torneranno indietro prossimo aggiornamento).

C'è un modo per rimuovere o disattivare le opzioni del tema dal tema figlio? Forse qualcosa sulla falsariga di una funzione "remove_options()"? O forse qualcosa che avrebbe raggiunto quell'effetto? In altre parole, la domanda è se le opzioni di tema possono essere rimosse SENZA eliminare/ignorare la funzione originale che le ha aggiunte.

Sono sicuro che con abbastanza puttering, potrei nascondere l'opzione con CSS o javascript ... ma dai.

risposta

12

Dopo un secondo giro di scavare ...

questo è assolutamente facile!

è possibile ripercorrere i miei passi avviando here, ma il codice è abbastanza auto-esplicativo:

add_action('init', 'remove_crap'); 
    function remove_crap() { 

    remove_custom_image_header(); 
    remove_custom_background(); 
    remove_theme_support('post-formats'); 
} 

Si può guardare questi in su nel codice. Remove_theme_support accetta una delle diverse stringhe che identificano varie opzioni (oltre a solo post-formati). L'unico problema che ho riscontrato è che devono essere richiamati da un hook (non puoi semplicemente scaricarli in functions.php). Sto usando init ma probabilmente ce n'è un altro più appropriato.

L'unica cosa che non ho ancora capito è come rimuovere il collegamento alla pagina "Opzioni tema" che appare sotto Aspetti. So che è stato aggiunto con add_theme_page() ma non sembra esserci un utile remove_theme_page().

AGGIORNAMENTO: l'ho trovato! Questo è molto mal documentate, ma alla fine è abbastanza facile da fare:

add_action('admin_init', 'remove_twentyeleven_theme_options', 11); 
    function remove_twentyeleven_theme_options() { 
remove_submenu_page('themes.php', 'theme_options'); 
} 

Nel mio esempio, 'themes.php' bersagli menu aspetti e 'theme_options' è il menu_slug utilizzato nel tema TwentyEleven. Ovviamente questi parametri variano a seconda del menu o sottomenu che stai modificando. This page ti indirizzerà nella giusta direzione.

ps: Ecco come sbarazzarsi di modelli dalla tema genitore che non si desidera utilizzare: THIS non è essenziale alla mia domanda esatta, ma è strettamente legato e probabilmente utile a chi sta cercando di fare cosa sto facendo.

+2

Nessuno di questi suggerimenti è in realtà il modo "corretto" per raggiungere questo obiettivo - le funzioni remove_ * sono tutte deprecate a favore di remove_theme_support, e init è troppo tardi per chiamare queste funzioni - dovrebbe essere in "after_setup_theme". L'opzione "remove_submenu_page" nasconde semplicemente il menu, in realtà non disabilita il supporto. Il modo corretto per farlo è in un'azione after_setup_theme con una priorità inferiore a 10 (cioè 11 o più) per assicurarsi che venga eseguita dopo la chiamata del genitore a after_setup_theme (assumendo che il tema principale usi la priorità predefinita di 10). Pubblicherò una nuova risposta per riferimento. –

+0

Grazie per questo, SDP. Mi stavo chiedendo se tu sapessi di un modo per rimuovere solo una * opzione * tab dal tema principale invece dell'intero pannello 'opzioni tema'? La mia domanda è descritta qui in dettaglio se hai tempo per guardarla: http://wordpress.stackexchange.com/questions/138584/how-do-i-remove-a-parents-theme-option-tab-through- the-child-theme – J82

1

Sfortunatamente, il modo in cui l'ereditarietà del tema funziona nel caso di Wordpress è che le funzioni del tema figlio sono semplicemente "aggiunte" alle funzioni del tema principale.

A differenza di style.css, function.php di un tema figlio non sovrascrive la sua controparte dal genitore. Invece, viene caricato in aggiunta alle funzioni.php del genitore. (In particolare, è giusto caricato prima del file del genitore.) (1)

Così, in risposta diretta alla sua domanda di cui sopra, sembra (2) come questo potrebbe non possibile con il modo in cui WordPress gestisce temi e bambino temi.

Personalmente, non mi preoccuperei di avere quelle funzioni o variabili extra nel file functions.php.

  1. http://codex.wordpress.org/Child_Themes
  2. http://wordpress.org/support/topic/theme-options-in-child-theme
+0

Grazie, ma questo non è davvero utile perché sostanzialmente rimette la domanda originale. – emersonthis

+0

Credo che la risposta risieda nel fatto che i temi figli non possono rimuovere le funzioni del tema principale. – summea

+0

Ho modificato la risposta per includere la risposta originale implicita. :) – summea

8

Il modo corretto per rimuovere il supporto per tema aggiunto in un tema principale dal tema figlio è effettuare la chiamata a remove_theme_support in un'azione after_setup_theme chiamata con una priorità inferiore rispetto a quella del genitore.

Il file functions.php da un bambino temi è chiamato immediatamente prima che del tema genitore, quindi se si utilizza la priorità predefinita per after_setup_theme, after_setup_theme del bambino finisce per essere chiamato prima che del genitore, così si finisce per rimuovendo il supporto per i temi inesistenti in tuo figlio, solo per averlo di nuovo aggiunto dal genitore che esegue after_setup_theme.

Quindi, aggiungendo l'azione figlio con una priorità più bassa, è possibile assicurarsi che venga chiamato dopo la chiamata del genitore alla stessa azione.

Quindi:

// added to child's functions.php  

add_action('after_setup_theme', 'child_after_setup_theme', 11); 
// Parent theme uses the default priority of 10, so 
// use a priority of 11 to load after the parent theme. 

function child_after_setup_theme() 
{ 
    remove_theme_support('custom-background'); 
    remove_theme_support('custom-header'); 
    remove_theme_support('post-formats'); 
    // ... etc. 
} 

Nel caso del tema TwentyEleven, si potrebbe anche appena oltre-ride l'intera funzione twentyeleven_setup in functions.php del vostro bambino, ma che è un metodo piuttosto troppo rigido per raggiungere tale obiettivo.

+0

C'è un modo per rimuovere solo una * opzione * tab dal tema principale invece dell'intero pannello 'opzioni tema'? La mia domanda è descritta qui in dettaglio se hai tempo per guardarla: http: //wordpress.stackexchange.it/questions/138584/how-do-i-remove-a-parents-theme-option-tab-through-the-child-theme – J82

+0

Presumibilmente, Simon ha ragione. Questo è il modo corretto per raggiungerlo. Tuttavia, non riesco a farlo funzionare nel tema figlio di WC Storefront. Non so come rimuovere questo dannato codice. – retroriff

1

Questo è un thread vecchio, quindi voglio solo aggiungere se qualcuno entra in questo posto e vuole una risposta. Risolvo il tema del bambino prendendo quel file esatto, facendo una copia e aggiungendolo al tema figlio. Ho il plugin "editor di codice avanzato", quindi non ho bisogno di andare in FTP. Copia il file specifico che desideri modificare, crea un nuovo foglio in tema figlio con lo stesso nome e contenuto, quindi esegui le modifiche che desideri lì. Prima recupererà i file del tema figlio e il tuo sito verrà aggiornato.

Problemi correlati