Hva er barn temaer? Barnemner er en nyttig WordPress-funksjon som lar utviklere bygge en ny mal uten å starte fra bunnen av, men ved å utnytte alle funksjonene som allerede er tilgjengelige i et eksisterende tema.
Noen ganger, men foreldre tema Vi har valgt at nettstedet vårt kan ha noen funksjoner som vi ikke trenger (eller vi må tilpasse for å dekke våre behov), for eksempel egendefinerte innleggstyper med en annen slug, Shortcodes, JavaScript-biblioteker, bildestørrelser som vi ikke t bruk og så videre ...
Selv om det kan være enkelt å oppnå det vi ønsker ved å redigere temaet direkte, er det også sant at hver gang temaet blir oppdatert, må vi gjøre alle tilpassingene igjen. Dette kan være frustrerende, så det er et annet alternativ: vi kan lage en barn tema og bruk > functions.php> fil for å endre foreldre tema egenskaper. På denne måten kan vi oppgradere overordnet tema hver gang en ny versjon blir utgitt uten å miste tilpassingene våre.
Før vi går inn i mer detaljerte detaljer, en kort notat om temautseendet: vi kan endre farger, bakgrunner, typografi og layout gjennom style.css Fil av barnetema ved å importere foreldrene style.css og overstyrer stilene vi vil endre.
For mer kontroll på oppsettet, kan vi også følge hvordan Abbas Suterwala antyder i hans innlegg og klone de overordnede tilpassede malefilene i vårt barn tema:
Da bør temaet for barn eventuelt overstyre andre malfiler som author.php, category.php, etc. WordPress-rammeverket ser først etter en malfil i barnetemappen, og hvis den ikke blir funnet, vil den hente den fra overordnet katalog.
Gjennom barnetemaet functions.php fil vi kan håndtere:
Så, la oss si at vi har denne nettsidestrukturen:
La oss komme i gang: Opprett en tom functions.php fil i / Wp-content / themes / foo-tema-barn / katalog.
For det meste vil vi bruke en generisk wp_tuts_remove_features ()
funksjon, hekta på WordPress after_setup_theme
handling. Vi har også satt 10
som en tredje parameter (prioritet), så vi er sikre på at funksjonen utløses før den forrige.
add_action ('after_setup_theme', 'remove_parent_theme_features', 10); funksjon remove_parent_theme_features () // vår kode her
Noen overordnede temaer legger til funksjoner for WordPress gjennom add_theme_support
funksjon.
Tilgjengelige funksjoner er:
post-formater
post-thumbnails
custom-bakgrunn
custom-header
automatiske matings-koblinger
Så for å fjerne dem, kan vi endre remove_parent_theme_features ()
fungere i functions.php fil.
funksjon remove_parent_theme_features () remove_theme_support ('postformater'); remove_theme_support ('post-miniatyrer'); remove_theme_support ('custom-background'); remove_theme_support ('custom-header'); remove_theme_support ('automatisk feed-links');
Fjerning av egendefinerte innleggstyper og egendefinerte taksonomier er enkelt: hvis foreldre functions.php filen legger til a Film egendefinert innleggstype, gjennom a parent_movie_add_post_type ()
funksjon:
// PARENT functions.php add_action ('after_setup_theme', 'parent_movie_add_post_type'); funksjon parent_movie_add_post_type () $ parent_args = array (// andre argumenter ... 'rewrite' => array ('slug' => 'film'), 'supports' => array ('title', 'editor' , 'utdrag' ) ); register_post_type ('movie', $ parent_args);
... vi kan tilpasse det takket være vårt barn functions.php fil:
// CHILD functions.php funksjon remove_parent_theme_features () // fjern Film Custom Post Type remove_action ('init', 'parent_movie_add_post_type'); / * Alternativt kan vi legge til vår egendefinerte innleggstype for å overskrive bare noen aspekter av foreldrefunksjonen * / add_action ('init', 'child_movie_post_type'); funksjon child_movie_post_type () $ child_args = array (// andre argumenter ... // endre Custom Post Slug 'rewrite' => array ('slug' => 'barnfilm'), // fjern utdrag og legg til innleggets tommel ' støtter '=> array (' title ',' editor ',' author ',' miniatyrbilde ')); register_post_type ('movie', $ child_args);
Vi kan også fjerne bare bestemte funksjoner uten å registrere ikke posttypen, for eksempel hvis vi ønsker å erstatte utdragsfeltet med et innlegg som er utvalgt, kan vi endre funksjonen på denne måten:
funksjon remove_parent_theme_features () add_action ('init', 'wp_tuts_remove_post_feature'); funksjon wp_tuts_remove_post_feature () // fjern utdrag remove_post_type_support ('movie', 'excerpt'); // legg til innleggs thumbs add_post_type_support ('movie', 'miniatyrbilde');
Du finner en komplett liste over flyttbare funksjoner under remove_post_type_support
i WordPress Codex.
I likhet med egendefinerte innleggstyper kan du fjerne en egendefinert taksonomi lagt til i overordnet tema ved hjelp av a parent_taxonomy ()
funksjon, på denne måten:
funksjon wp_tuts_after_setup_theme () remove_action ('init', 'parent_taxonomy');
Vi kan fjerne et overordnetes meny gjennom unregister_nav_menu ()
funksjon. Denne funksjonen tar en parameter, menypunktsidentifikatoren slug brukes i register_nav_menu ()
funksjon.
Hvis foreldetemaet registrerer en Header-menyen:
// PARENT functions.php add_action ('after_setup_theme', 'register_my_menu'); funksjon register_my_menu () register_nav_menu ('header-menu', __ ('Header Menu'));
Vi kan fjerne det på denne måten:
// CHILD functions.php funksjon remove_parent_theme_features () unregister_nav_menu ('header-menu');
For å identifisere registrerte menyer kan vi søke i overordnetematkoden for register_nav_menu ()
samtaler. Det første argumentet for funksjonen representerer meny-ID-en som vi kan bruke til å avregistrere (i dette tilfellet header-menyen
).
WordPress kommer med noen standard Widgets som vi kan deaktivere. Også vårt foreldetema kan legge til egne widgets, slik at vi kan søke i temafiler som ser etter hvor de er erklært og noterer seg navnet deres. Vanligvis deklareres de i en PHP-klasse som strekker seg WP_Widget
klasse:
// PARENT temaklass ParentWidgetName utvider WP_Widget // widget code
Så, for å avregistrere widgeten, bruker vi klassenavnet ParentWidgetName
:
add_action ('widgets_init', 'wp_tuts_parent_unregister_widgets', 10); funksjon wp_tuts_parent_unregister_widgets () // fjern (noen) WordPress standard Widgets unregister_widget ('WP_Widget_Pages'); unregister_widget ('WP_Widget_Calendar'); / / Fjern foreldre registrert Widget unregister_widget ('ParentWidgetName'); // registrer en tilpasset widget (hvis nødvendig) register_widget ('MyCustomWidget'); // Ikke glem å legge til Widget Class-klassen MyCustomWidget utvider WP_Widget // Custom Widget code
For sidebjelker er handlingen lik:
add_action ('widgets_init', 'wp_tuts_parent_unregister_sidebars', 10); funksjon wp_tuts_parent_unregister_sidebars () // fjern et sidebar registrert av foreldentemaet unregister_sidebar ('first-footer-widget-området');
For å identifisere registrerte sidebjelker, kan vi søke i overordnetes kode for register_sidebar ()
samtaler.
Alt vi trenger er å legge merke til sidefelt-ID:
// PARENT functions.php $ args = array ('id' => 'first-footer-widget-området', // andre args ...); register_sidebar ($ args);
Overstyring eller fjerning av kortkoder er enkelt, vi trenger bare å endre funksjonen vår på denne måten:
funksjon remove_parent_theme_features () // fjern foreldre [gmap] shortcode remove_shortcode ('gmap'); // legg til vår [gmap] shortcode add_shortcode ('gmap', 'child_shortcode_gmap'); funksjon child_shortcode_gmap ($ atts) // lage vår shortcode som overskriver den overordnede en
For å identifisere registrerte kortkoder kan vi søke i overordnetematkoden for add_shortcode ()
samtaler. Den første parameteren er den vi er ute etter ;-).
Hvis foreldetemaet legger til nye bildestørrelser som vi ikke bruker i vårt barntema, kan vi søke i overordnetematkoden for add_image_size ()
samtaler. I dette tilfellet er de: custom_size_parent_1
og custom_size_parent_2
. Vi tilbakestiller dem på denne måten:
add_filter ('intermediate_image_sizes_advanced', 'remove_parent_image_sizes'); funksjon remove_parent_image_sizes ($ størrelser) unset ($ sizes ['custom_size_parent_1']); unset ($ størrelser ['custom_size_parent_2']); returner $ størrelser;
Dette er nyttig fordi hver gang brukeren laster opp et bilde, vil ikke WordPress opprette flere bildestørrelser som vi ikke bruker.
For å lage egendefinerte bildestørrelser kan vi legge til dette i vårt barn functions.php fil:
hvis (function_exists ('add_image_size')) // 400 piksler bred og ubegrenset høyde add_image_size ('custom_size_child_1', 400, 9999); // 320 piksler bred og 240 px høy, beskåret add_image_size ('custom_size_child_2', 320, 240, true);
Gjennom remove_meta_box ()
funksjon vi kan fjerne både standard WordPress og overordnede tema metaboxer.
En liste over WordPress standard metaboxer er tilgjengelig under remove_meta_box ()
i WordPress Codex. Funksjonen har tre argumenter: Metabox-ID, siden den vil bli fjernet fra, redigeringskonteksten (normal
, avansert
, side
).
Hvis foreldetemaet legger til metaboxer i skjermbildet etter redigering, kan vi deaktivere dem på denne måten:
add_action ('admin_menu', 'wp_tuts_remove_metaboxes', 99); funksjon wp_tuts_remove_metaboxes () // fjern standard WP Trackback Metabox fra Innlegg redigering side remove_meta_box ('trackbacksdiv', 'post', 'normal'); // fjerne en parentemetabell 'parent_post_foo_metabox' remove_meta_box ('parent_post_foo_metabox', 'post', 'normal');
Vi kan identifisere overordnede metaboxer ved å søke i overordnetematkoden for add_meta_box
eller add_meta_boxes ()
samtaler.
ID for metabox å fjerne er det første argumentet til add_meta_box ()
funksjon.
Hvis foreldetemaet legger til JavaScript og CSS-stiler som vi ikke trenger:
// PARENT functions.php add_action ('wp_print_scripts', 'parent_scripts'); add_action ('wp_print_styles', 'parent_styles'); funksjon parent_scripts () wp_enqueue_script ('fancybox-parent-js', get_stylesheet_directory_uri (). '/fancybox/jquery.fancybox.pack.js'); funksjon parent_styles () wp_enqueue_style ('fancybox-parent-css', get_stylesheet_directory_uri (). '/fancybox/jquery.fancybox.css');
Vi kan fjerne dem på denne måten:
// CHILD functions.php add_action ('wp_print_scripts', 'child_overwrite_scripts', 100); add_action ('wp_print_styles', 'child_overwrite_styles', 100); funksjon child_overwrite_scripts () wp_deregister_script ('fancybox-parent-js'); funksjon child_overwrite_styles () wp_deregister_style ('fancybox-parent-css');
For å identifisere registrerte JavaScripts og CSS-stiler kan vi søke i overordnetematkoden for wp_enqueue_script ()
og wp_enqueue_style ()
samtaler.
Det første argumentet til funksjonen er det vi kan bruke i wp_deregister_script ()
eller wp_deregister_style ()
funksjoner.
Noen temaer, som tematisk, gir flere kroker for å endre temaet atferd uten å endre temafiler. I dette tilfellet gir tematiske a thematic_header
handling som laster andre handlinger:
thematic_brandingopen ()
thematic_blogtitle ()
thematic_blogdescription ()
thematic_brandingclose ()
thematic_access ()
Vi vil ikke undersøke i detalj hva disse funksjonene gjør, sannsynligvis noen av dem skrive ut noe info i bloggoverskriften: navn, beskrivelse og så videre. I dette tilfellet kan vi deaktivere thematic_blogdescription ()
fungere på denne måten:
// Unhook standard Tematisk funksjon funksjon unhook_thematic_functions () // vi legger posisjon nummeret til den opprinnelige funksjonen (5) // for prioriterte grunner remove_action ('thematic_header', 'thematic_blogdescription', 5); add_action ('init', 'unhook_thematic_functions');
I disse tilfellene kan det være vanskelig å forstå strukturen til foreldetemaet og hvordan det fungerer. Mitt råd er å velge et overordnet tema som leveres med detaljert dokumentasjon, et godt supportforum, og gjør kroker tilgjengelige i hele koden.
Dette får oss til å miste mindre utviklings tid og gjøre tilpasningen av barnet tema enklere.
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