Modificarea comportamentului temei părinte în tema copilului

Ce sunt teme pentru copii? Tematica pentru copii este o funcție utilă WordPress care permite dezvoltatorilor să construiască un nou șablon fără a începe de la zero, dar profitând de toate funcțiile deja disponibile într-o temă existentă.

Uneori, totuși, temă tematică pe care le-am ales pentru site-ul nostru, pot avea anumite caracteristici pe care nu le avem nevoie (sau trebuie să le personalizăm pentru a se potrivi cel mai bine nevoilor noastre), de exemplu tipuri de posturi personalizate cu diferite slug, Shortcodes, biblioteci JavaScript, utilizarea t și așa mai departe ...


Personalizați tema în două moduri

În timp ce ar putea fi ușor să realizăm ceea ce dorim prin editarea directă a temei, este de asemenea adevărat că de fiecare dată când tema va fi actualizată, va trebui să facem din nou toate personalizările. Acest lucru poate fi frustrant, deci există o altă opțiune: putem crea o temă pentru copii și utilizați > functions.php> fișier pentru a modifica temă tematică caracteristici. În acest fel, putem actualiza tema parentală de fiecare dată când este lansată o nouă versiune fără a pierde personalizarea.

Înainte de a intra în detalii mai detaliate, o scurtă notă despre aspectul temei: putem modifica culorile, fundalul, tipografia și aspectul prin style.css fișier al temei copilului prin importarea părintelui style.css și suprasolicitarea stilurilor pe care vrem să le schimbăm.

Pentru un control mai mare asupra aspectului, putem urmări și modul în care Abbas Suterwala sugerează în postarea sa și clonează fișierele șablon personalizate mamă în tema noastră copil:

Apoi, tema copilului ar putea suprascrie opțional alte fișiere de șabloane cum ar fi author.php, category.php, etc. Cadrul WordPress caută mai întâi un fișier șablon în directorul tematic copil și apoi dacă nu este găsit, îl va prelua din directorul părinte.


Ce putem modifica

Prin tema copilului functions.php fișierul pe care îl putem face cu:

  • Caracteristici tematice
  • Tipuri personalizate de posturi și taxonomii
  • Meniuri și bare laterale
  • Widget-uri
  • Scurtăturile
  • Dimensiuni suplimentare ale imaginii
  • metaboxele
  • JavaScript și CSS
  • Acțiunile și filtrele temei inițiale

Deci, să presupunem că avem această structură de site web:

  • htdocs SAU www
    • wp-content
      • tematică
        • foo-temă (directorul mamă temă - aceasta nu voi fi modificat)
          • functions.php
          • header.php
          • style.css
          • alte fișiere șablon ...
        • foo-tema-copil (directorul nostru copil temă)
          • functions.php (fișierul pe care îl vom folosi pentru a personaliza tema părinte)
          • header.php (înlocuirile header.php pentru tema părinte)
          • style.css (acesta este un fișier necesar într-o temă copil și trebuie să fie numit style.css)

Să începem: creați un gol functions.php fișier în / Wp-content / teme / foo-tema-copil / director.

În cea mai mare parte vom folosi un produs generic wp_tuts_remove_features () funcție, conectat la WordPress after_setup_theme acțiune. Am stabilit și noi 10 ca al treilea parametru (prioritate), deci suntem siguri că funcția este declanșată înainte de cea părinte.

 add_action ('after_setup_theme', 'remove_parent_theme_features', 10); function remove_parent_theme_features () // codul nostru aici

1. Eliminați caracteristicile temei

Unele tematici părinte adaugă caracteristici la WordPress prin add_theme_support funcţie.

Funcțiile disponibile sunt:

  • post-formate
  • post-miniaturi
  • fundal personalizat
  • custom-header
  • automate-feed-link-uri

Deci, pentru a le elimina, putem modifica remove_parent_theme_features () funcția în functions.php fişier.

 funcția remove_parent_theme_features () remove_theme_support ('post-formats'); remove_theme_support ("post-miniaturi"); remove_theme_support ("fundal personalizat"); remove_theme_support ("antet personalizat"); remove_theme_support ("link-uri automate de feed-uri"); 

2. Eliminați tipurile personalizate de posturi și taxonomiile

Eliminarea tipurilor personalizate de posturi și a taxonomiilor personalizate este ușoară: dacă părintele functions.php fișierul adaugă a Film post tip personalizat, printr - un parent_movie_add_post_type () funcţie:

 // PARENT funcții.php add_action ('after_setup_theme', 'parent_movie_add_post_type'); funcția parent_movie_add_post_type () $ parent_args = array (// alte argumente ... 'rewrite' => array ('slug' => 'film'), 'supports' , 'extras' ) ); register_post_type ('film', $ parent_args); 

... o putem personaliza datorită copilului nostru functions.php fişier:

 // funcția CHILD functions.php remove_parent_theme_features () // elimina filmul Personalized Post Type remove_action ('init', 'parent_movie_add_post_type'); / * Alternativ, putem adăuga tipul postului personalizat pentru a suprascrie doar câteva aspecte ale funcției părinte * / add_action ('init', 'child_movie_post_type');  funcția child_movie_post_type () $ child_args = array (// alte argumente ... // modificați personalizatul post slug 'rewrite' => array ('slug' => 'child-movie' acceptă '=> array ("titlu", "editor", "autor", "miniatură")); register_post_type ('film', $ child_args); 

De asemenea, putem elimina numai anumite caracteristici fără a anula înregistrarea tipului postului, de exemplu dacă vrem să înlocuim câmpul extras cu o imagine post-featured, putem modifica funcția în felul următor:

 funcția remove_parent_theme_features () add_action ('init', 'wp_tuts_remove_post_feature');  funcția wp_tuts_remove_post_feature () // eliminați extrasul remove_post_type_support ('movie', 'excerpt'); / / adăugați miniaturi postare add_post_type_support ('film', 'thumbnail'); 

Puteți găsi o listă completă a caracteristicilor detașabile de sub remove_post_type_support în Codul WordPress.

Similar cu tipurile de postări personalizate, puteți să eliminați o taxonomie personalizată adăugată în tema părinte printr-o parent_taxonomy () funcția, în acest fel:

 funcția wp_tuts_after_setup_theme () remove_action ('init', 'parent_taxonomy'); 

3. Eliminați meniurile

Putem elimina un meniu temă părinte prin unregister_nav_menu () funcţie. Această funcție are un parametru, numele de identificare a locației din meniu utilizat în register_nav_menu () funcţie.

Dacă tema părinte înregistrează a Meniul Header:

 // PARENT funcții.php add_action ('after_setup_theme', 'register_my_menu'); funcția register_my_menu () register_nav_menu ('header-menu', __ ('Header Menu')); 

Îl putem elimina în felul următor:

 // funcția CHILD functions.php remove_parent_theme_features () unregister_nav_menu ('header-menu'); 

Pentru a identifica meniurile înregistrate, putem căuta codul temei părinte pentru register_nav_menu () apeluri. Primul argument al funcției reprezintă ID-ul meniului pe care îl putem folosi pentru a ne anula înregistrarea (în acest caz header-meniu).


4. Eliminați widgeturile și barele laterale

WordPress vine cu unele Widgeturi implicite pe care le putem dezactiva. De asemenea, tema părintelui ar putea adăuga propriile widget-uri, astfel încât să putem căuta în fișierele tematice care caută unde sunt declarate și să ia notă de numele lor. De obicei, ele sunt declarate într-o clasă PHP care extinde WP_Widget clasă:

 // Clasa tematică PARENT ParentWidgetName extinde WP_Widget // widget code

Deci, pentru a dezabona widgetul, vom folosi numele clasei ParentWidgetName:

 add_action ('widgets_init', 'wp_tuts_parent_unregister_widgets', 10); funcția wp_tuts_parent_unregister_widgets () // remove (some) WordPress implicit Widgeturi unregister_widget ('WP_Widget_Pages'); unregister_widget ('WP_Widget_Calendar'); // remove Părinte înregistrat Widget unregister_widget ('ParentWidgetName'); // înregistrați un Widget personalizat (dacă este necesar) register_widget ('MyCustomWidget');  // nu uitați să adăugați clasa Widget Class MyCustomWidget extinde WP_Widget // Custom Widget code

Pentru barele laterale, acțiunea este similară:

 add_action ('widgets_init', 'wp_tuts_parent_unregister_sidebars', 10); funcția wp_tuts_parent_unregister_sidebars () // elimina o bară laterală înregistrată de tema părinte unregister_sidebar ('first-footer-widget-area'); 

Pentru a identifica barele laterale înregistrate, putem căuta codul temei părinte register_sidebar () apeluri.

Tot ce avem nevoie este să țineți cont de ID-ul bara laterală:

 // PARENT funcții.php $ args = array ('id' => 'prima-footer-widget-area', // alte args ...); register_sidebar ($ args);

5. Scoateți codurile scurte

Suprascrierea sau eliminarea codurilor scurte este ușoară, trebuie doar să ne modificăm funcția în felul următor:

 funcția remove_parent_theme_features () // elimina parola parentală [gmap] shortcode remove_shortcode ('gmap'); // adăugați codul nostru scurt [gmap] add_shortcode ('gmap', 'child_shortcode_gmap');  functie child_shortcode_gmap ($ atts) // creaza codul nostru scurt care suprascrie pe cel parental

Pentru a identifica codurile scurte înregistrate, putem căuta codul temei-mamă add_shortcode () apeluri. Primul parametru este cel pe care îl urmăm ;-).


6. Eliminați dimensiunile suplimentare ale imaginilor

Dacă tema părinte adaugă dimensiuni noi de imagini pe care nu le folosim în tema copilului nostru, putem căuta codul temei-mamă add_image_size () apeluri. În acest caz, acestea sunt: custom_size_parent_1 și custom_size_parent_2. Restabilim în felul următor:

 add_filter ('intermediate_image_sizes_advanced', 'remove_parent_image_sizes'); funcția remove_parent_image_sizes ($ sizes) unset ($ size ['custom_size_parent_1']); unset ($ size ['custom_size_parent_2']); returnați dimensiunile $; 

Acest lucru este util pentru că de fiecare dată când utilizatorul încarcă o imagine, WordPress nu va crea dimensiuni suplimentare de imagine pe care nu le folosim.

Pentru a crea dimensiuni personalizate ale imaginilor, putem adăuga acest lucru în copilul nostru functions.php fişier:

 dacă (funcția_există ('add_image_size')) // lățime 400 pixeli și înălțime nelimitată add_image_size ('custom_size_child_1', 400, 9999); // 320 pixeli lățime și 240 px înălțime, tăiate add_image_size ('custom_size_child_2', 320, 240, true); 

7. Eliminați metaboxele

Prin remove_meta_box () funcția putem elimina atât WordPress implicit, cât și metaboxele teme tematice.

O listă de metaboxuri implicite WordPress este disponibilă sub remove_meta_box () în Codul WordPress. Funcția are trei argumente: ID-ul metabox, pagina pe care va fi eliminată, contextul de editare (normal, avansat, latură).

Dacă tema părinte adaugă metaboxuri în ecranul de editare post, le putem dezactiva în felul următor:

 add_action ('admin_menu', 'wp_tuts_remove_metaboxes', 99); funcția wp_tuts_remove_metaboxes () // remove default WP Trackback Metabox din pagina de editare a mesajelor remove_meta_box ('trackbacksdiv', 'post', 'normal'); // elimina o temă maternă Metabox 'parent_post_foo_metabox' remove_meta_box ('parent_post_foo_metabox', 'post', 'normal'); 

Putem identifica metaboxele părinte prin căutarea codului temei părinte pentru add_meta_box sau add_meta_boxes () apeluri.

ID-ul metaboxului de eliminat este primul argument al lui add_meta_box () funcţie.


8. Eliminați JavaScripts și foile de stil CSS

Dacă tema părinte adaugă stiluri JavaScript și CSS pe care nu avem nevoie:

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

Le putem elimina în felul următor:

 // CHILD funcții.php add_action ('wp_print_scripts', 'child_overwrite_scripts', 100); add_action ('wp_print_styles', 'child_overwrite_styles', 100); funcția child_overwrite_scripts () wp_deregister_script ('fancybox-parent-js');  funcția child_overwrite_styles () wp_deregister_style ('fancybox-parent-css'); 

Pentru a identifica JavaScript-urile și stilurile CSS înregistrate, putem căuta codul temei-mamă wp_enqueue_script () și wp_enqueue_style () apeluri.

Primul argument al funcției este cel pe care îl putem folosi în wp_deregister_script () sau wp_deregister_style () funcții.


9. Eliminați acțiunile și filtrele temei părinte

Unele teme, cum ar fi Thematic, oferă câteva cârlige pentru a modifica comportamentul temei fără a modifica fișierele tematice. În acest caz, Thematic oferă o thematic_header acțiune care încarcă alte acțiuni:

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

Nu vom examina în detaliu ce fac aceste funcții, probabil unele dintre ele imprimă câteva informații în antetul blogului: nume, descriere și așa mai departe ... În acest caz, putem dezactiva thematic_blogdescription () funcționează în felul următor:

 // Unhook implicit funcții tematice funcția unhook_thematic_functions () // am pus numărul de poziție al funcției originale (5) // din motive prioritare remove_action ('thematic_header','thematic_blogdescription ', 5);  add_action ("init", "unhook_thematic_functions");

În aceste cazuri, poate fi greu de înțeles structura temei părinte și modul în care funcționează. Sfatul meu este să alegeți o temă părinte care să vină cu documentație detaliată, un forum de suport bun și să facă cârlige disponibile pe tot codul.

Acest lucru ne face cu siguranță să pierdem timpul de dezvoltare mai puțin și să facem personalizarea temei copilului mai ușoară.


Referințe

  • Teme pentru copii de bază și crearea temelor pentru copii în WordPress
  • Documentație WordPress Codex
    • 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
  • O colecție de teme tematice pentru WordPress
  • Tematică tematică cadru
Cod