Come modificare il comportamento del tema principale all'interno del tema figlio

Cosa sono temi figlio? I temi secondari sono un'utile funzionalità di WordPress che consente agli sviluppatori di creare un nuovo modello senza ripartire da zero, ma sfruttando tutte le funzionalità già disponibili in un tema esistente.

A volte, tuttavia, il tema genitore abbiamo scelto per il nostro sito alcune funzioni che non sono necessarie (o che dobbiamo personalizzare per soddisfare al meglio le nostre esigenze), ad esempio tipi di post personalizzati con un diverso slug, codici brevi, librerie JavaScript, dimensioni dell'immagine che non abbiamo usare e così via ...


Personalizza il tema in due modi

Mentre potrebbe essere facile ottenere ciò che vogliamo modificando direttamente il tema, è anche vero che ogni volta che il tema verrà aggiornato dovremo fare di nuovo tutte le personalizzazioni. Questo può essere frustrante, quindi c'è un'altra opzione: possiamo creare un tema del bambino e usa il > functions.php> file per modificare il tema genitore Caratteristiche. In questo modo possiamo aggiornare il tema principale ogni volta che viene rilasciata una nuova versione senza perdere le nostre personalizzazioni.

Prima di entrare in dettagli più specifici, una breve nota sull'aspetto del tema: possiamo modificare i colori, gli sfondi, la tipografia e il layout attraverso il style.css file del tema figlio importando il genitore style.css e sovrascrivendo gli stili che vogliamo cambiare.

Per un maggiore controllo sul layout, possiamo anche seguire il modo in cui Abbas Suterwala suggerisce nel suo post e clonare i file del modello personalizzato padre nel nostro tema figlio:

Quindi il tema figlio potrebbe facoltativamente sovrascrivere altri file modello come author.php, category.php, ecc. Il framework WordPress cerca dapprima un file modello nella directory del tema figlio e quindi, se non trovato, lo preleva dalla directory padre.


Cosa possiamo modificare

Attraverso il tema del bambino functions.php file che possiamo trattare con:

  • Caratteristiche del tema
  • Tipi di post personalizzati e tassonomie
  • Menu e barre laterali
  • widget
  • Shortcodes
  • Altre dimensioni dell'immagine
  • Metabox
  • JavaScript e CSS
  • Azioni e filtri del tema padre

Quindi, diciamo che abbiamo questa struttura del sito web:

  • htdocs O www
    • wp-content
      • temi
        • foo-tema (directory del genitore tema - it non lo farò essere modificato)
          • functions.php
          • header.php
          • style.css
          • altri file modello ...
        • foo-theme-bambino (elenco dei nostri bambino tema)
          • functions.php (il file che useremo per personalizzare il tema principale)
          • header.php (override header.php per il tema genitore)
          • style.css (questo è un file richiesto in un tema figlio e deve essere nominato style.css)

Iniziamo: crea un vuoto functions.php file nel / Wp-content / themes / foo-theme-bambino / elenco.

Per la maggior parte useremo un generico wp_tuts_remove_features () funzione, agganciato al WordPress after_setup_theme azione. Abbiamo anche impostato 10 come terzo parametro (priorità), quindi siamo sicuri che la funzione sia attivata prima di quella principale.

 add_action ('after_setup_theme', 'remove_parent_theme_features', 10); function remove_parent_theme_features () // our code here

1. Rimuovere le caratteristiche del tema

Alcuni temi principali aggiungono funzionalità a WordPress attraverso il add_theme_support funzione.

Le funzionalità disponibili sono:

  • post-formati
  • post-miniature
  • custom-sfondo
  • custom-intestazione
  • alimentazione automatica-link

Quindi per rimuoverli, possiamo modificare il remove_parent_theme_features () funzione nel functions.php file.

 function remove_parent_theme_features () remove_theme_support ('post-formats'); remove_theme_support ('post-thumbnails'); remove_theme_support ('custom-background'); remove_theme_support ('custom-header'); remove_theme_support ('automatic-feed-links'); 

2. Rimuovere tipi di post personalizzati e tassonomie

Rimozione di tipi di post personalizzati e tassonomie personalizzate è semplice: se il genitore functions.php il file aggiunge a Film tipo di messaggio personalizzato, tramite a parent_movie_add_post_type () funzione:

 // PARENT functions.php add_action ('after_setup_theme', 'parent_movie_add_post_type'); function parent_movie_add_post_type () $ parent_args = array (// altri argomenti ... 'rewrite' => array ('slug' => 'film'), 'supports' => array ('titolo', 'editor', 'autore') , "estratto")); register_post_type ('movie', $ parent_args); 

... possiamo personalizzarlo grazie a nostro figlio functions.php file:

 // Funzione CHILD functions.php remove_parent_theme_features () // remove Movie Custom Post Type remove_action ('init', 'parent_movie_add_post_type'); / * in alternativa, possiamo aggiungere il nostro tipo di post personalizzato per sovrascrivere solo alcuni aspetti della funzione genitore * / add_action ('init', 'child_movie_post_type');  function child_movie_post_type () $ child_args = array (// altri argomenti ... // cambia Custom post slug 'rewrite' => array ('slug' => 'child-movie'), // rimuovi estratti e aggiungi post pollici ' supporta '=> array (' title ',' editor ',' author ',' thumbnail ')); register_post_type ('movie', $ child_args); 

Possiamo anche rimuovere solo alcune funzionalità senza annullare la registrazione del tipo di post, ad esempio se vogliamo sostituire il campo estratto con un'immagine post in evidenza, possiamo modificare la funzione in questo modo:

 function remove_parent_theme_features () add_action ('init', 'wp_tuts_remove_post_feature');  function wp_tuts_remove_post_feature () // remove excerpt remove_post_type_support ('movie', 'excerpt'); // aggiungi post thumb add_post_type_support ('movie', 'thumbnail'); 

È possibile trovare un elenco completo delle funzionalità rimovibili in remove_post_type_support nel codice WordPress.

Analogamente ai tipi di post personalizzati, puoi rimuovere una tassonomia personalizzata aggiunta al tema principale di a parent_taxonomy () funzione, in questo modo:

 function wp_tuts_after_setup_theme () remove_action ('init', 'parent_taxonomy'); 

3. Rimuovi menu

Siamo in grado di rimuovere il menu di un tema genitore attraverso il unregister_nav_menu () funzione. Questa funzione accetta un parametro, la lumaca dell'identificatore di posizione del menu utilizzata nel register_nav_menu () funzione.

Se il tema principale registra a Menu intestazione:

 // PARENT functions.php add_action ('after_setup_theme', 'register_my_menu'); function register_my_menu () register_nav_menu ('header-menu', __ ('Header Menu')); 

Possiamo rimuoverlo in questo modo:

 // Funzione CHILD functions.php remove_parent_theme_features () unregister_nav_menu ('header-menu'); 

Per identificare i menu registrati, possiamo cercare il codice del tema principale per register_nav_menu () chiamate. Il primo argomento della funzione rappresenta l'ID del menu che possiamo usare per annullare la registrazione (in questo caso header-menù).


4. Rimuovi widget e barre laterali

WordPress viene fornito con alcuni widget predefiniti che possiamo disattivare. Inoltre, il tema principale potrebbe aggiungere i propri widget, in modo che possiamo cercare nei file del tema cercando dove sono dichiarati e prendere nota del loro nome. Di solito sono dichiarati in una classe PHP che estende il WP_Widget classe:

 // La classe tematica PARENT ParentWidgetName estende WP_Widget // codice del widget

Quindi, per annullare la registrazione del widget, usiamo il nome della classe ParentWidgetName:

 add_action ('widgets_init', 'wp_tuts_parent_unregister_widgets', 10); function wp_tuts_parent_unregister_widgets () // rimuovi (alcuni) Widget predefiniti di WordPress unregister_widget ('WP_Widget_Pages'); unregister_widget ('WP_Widget_Calendar'); // remove Parent registered Widget unregister_widget ('ParentWidgetName'); // registra un Widget personalizzato (se necessario) register_widget ('MyCustomWidget');  // non dimenticare di aggiungere la classe Widget Class MyCustomWidget estende WP_Widget // Custom Widget code

Per le barre laterali l'azione è simile:

 add_action ('widgets_init', 'wp_tuts_parent_unregister_sidebars', 10); function wp_tuts_parent_unregister_sidebars () // rimuove una barra laterale registrata dal tema principale unregister_sidebar ('first-footer-widget-area'); 

Per identificare le barre laterali registrate, possiamo cercare il codice del tema principale per register_sidebar () chiamate.

Tutto ciò di cui abbiamo bisogno è prendere nota dell'ID della barra laterale:

 // PARENT functions.php $ args = array ('id' => 'first-footer-widget-area', // other args ...); register_sidebar ($ args);

5. Rimuovere i codici brevi

Sostituire o rimuovere i codici brevi è facile, abbiamo solo bisogno di modificare la nostra funzione in questo modo:

 function remove_parent_theme_features () // remove the parent [gmap] shortcode remove_shortcode ('gmap'); // aggiungi il nostro shortcode [gmap] add_shortcode ('gmap', 'child_shortcode_gmap');  function child_shortcode_gmap ($ atts) // crea il nostro shortcode che sovrascrive quello principale

Per identificare gli shortcode registrati, possiamo cercare il codice del tema principale per add_shortcode () chiamate. Il primo parametro è quello che cerchiamo ;-).


6. Rimuovere le dimensioni aggiuntive dell'immagine

Se il tema principale aggiunge nuove dimensioni di immagine che non usiamo nel nostro tema figlio, possiamo cercare il codice del tema principale per add_image_size () chiamate. In questo caso sono: custom_size_parent_1 e custom_size_parent_2. Li abbiamo ripristinati in questo modo:

 add_filter ('intermediate_image_sizes_advanced', 'remove_parent_image_sizes'); function remove_parent_image_sizes ($ sizes) unset ($ sizes ['custom_size_parent_1']); unset ($ sizes ['custom_size_parent_2']); restituire $ sizes; 

Questo è utile perché ogni volta che l'utente carica un'immagine, WordPress non creerà ulteriori dimensioni di immagine che non usiamo.

Per creare dimensioni di immagine personalizzate possiamo aggiungere questo nel nostro bambino functions.php file:

 if (function_exists ('add_image_size')) // 400 pixel di larghezza e altezza illimitata add_image_size ('custom_size_child_1', 400, 9999); // 320 pixel di larghezza e 240 px di altezza, ritagliata add_image_size ('custom_size_child_2', 320, 240, true); 

7. Rimuovere i Metabox

Tramite la remove_meta_box () funzione possiamo rimuovere sia WordPress di default che i metabox del tema principale.

Un elenco di metabox predefiniti di WordPress è disponibile sotto remove_meta_box () nel codice WordPress. La funzione ha tre argomenti: l'ID del metabox, la pagina da cui verrà rimosso, il contesto di modifica (normale, Avanzate, lato).

Se il tema principale aggiunge metabox nella schermata di post-editing, possiamo disabilitarli in questo modo:

 add_action ('admin_menu', 'wp_tuts_remove_metaboxes', 99); function wp_tuts_remove_metaboxes () // rimuovi default WP Trackback Metabox dalla pagina di editing di Posts remove_meta_box ('trackbacksdiv', 'post', 'normal'); // rimuove un tema principale Metabox 'parent_post_foo_metabox' remove_meta_box ('parent_post_foo_metabox', 'post', 'normal'); 

Possiamo identificare i metabox dei genitori cercando il codice del tema principale per add_meta_box o add_meta_boxes () chiamate.

L'ID del metabox da rimuovere è il primo argomento del add_meta_box () funzione.


8. Rimuovere JavaScripts e fogli di stile CSS

Se il tema principale aggiunge stili JavaScript e CSS di cui non abbiamo bisogno:

 // PARENT functions.php add_action ('wp_print_scripts', 'parent_scripts'); add_action ('wp_print_styles', 'parent_styles'); function parent_scripts () wp_enqueue_script ('fancybox-parent-js', get_stylesheet_directory_uri (). '/fancybox/jquery.fancybox.pack.js');  function parent_styles () wp_enqueue_style ('fancybox-parent-css', get_stylesheet_directory_uri (). '/fancybox/jquery.fancybox.css'); 

Possiamo rimuoverli in questo modo:

 // CHILD functions.php add_action ('wp_print_scripts', 'child_overwrite_scripts', 100); add_action ('wp_print_styles', 'child_overwrite_styles', 100); function child_overwrite_scripts () wp_deregister_script ('fancybox-parent-js');  function child_overwrite_styles () wp_deregister_style ('fancybox-parent-css'); 

Per identificare gli stili JavaScript e CSS registrati, possiamo cercare il codice del tema principale per wp_enqueue_script () e wp_enqueue_style () chiamate.

Il primo argomento della funzione è ciò che possiamo usare nel wp_deregister_script () o wp_deregister_style () funzioni.


9. Rimuovere azioni e filtri del tema principale

Alcuni temi, come Thematic, forniscono diversi hook per modificare il comportamento del tema senza alterare i file del tema. In questo caso, Thematic fornisce a thematic_header azione che carica altre azioni:

  • thematic_brandingopen ()
  • thematic_blogtitle ()
  • thematic_blogdescription ()
  • thematic_brandingclose ()
  • thematic_access ()

Non esamineremo in dettaglio le funzioni di queste funzioni, probabilmente alcune di esse stamperanno alcune informazioni nell'intestazione del blog: nome, descrizione e così via ... In questo caso possiamo disattivare la funzione thematic_blogdescription () funziona in questo modo:

 // Unhook default Funzione di funzioni tematiche unhook_thematic_functions () // inseriamo il numero di posizione della funzione originale (5) // per ragioni di priorità remove_action ('thematic_header', 'thematic_blogdescription', 5);  add_action ('init', 'unhook_thematic_functions');

In questi casi può essere difficile capire la struttura del tema principale e come funziona. Il mio consiglio è di scegliere un tema principale che venga fornito con una documentazione dettagliata, un buon forum di supporto e che rende gli hook disponibili in tutto il codice.

Questo sicuramente ci fa perdere meno tempo di sviluppo e semplifica la personalizzazione del tema bambino.


Riferimenti

  • Nozioni di base sui temi del bambino e creazione di temi figlio in WordPress
  • Documentazione del codice WordPress
    • after_setup_theme
    • remove_action
    • add_theme_support
    • register_post_type
    • add_post_type_support
    • remove_post_type_support
    • register_nav_menu
    • unregister_nav_menu
    • register_widget
    • unregister_widget
    • register_sidebar
    • unregister_sidebar
    • add_shortcode
    • remove_shortcode
    • add_image_size
    • add_meta_box
    • remove_meta_box
    • wp_deregister_script
    • wp_deregister_style
  • Una raccolta di temi padre di WordPress
  • Quadro tematico tematico