Slik endrer du foreldrenes temaoppførsel innen barnets tema

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 ...


Tilpass temaet på to måter

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.


Hva vi kan endre

Gjennom barnetemaet functions.php fil vi kan håndtere:

  • Tema funksjoner
  • Tilpassede posttyper og taksonomier
  • Menyer og sidebjelker
  • widgets
  • kortkoder
  • Ytterligere bildestørrelser
  • Meta
  • JavaScript og CSS
  • Foreldre tema handlinger og filtre

Så, la oss si at vi har denne nettsidestrukturen:

  • htdocs ELLER www
    • wp-innhold
      • temaer
        • foo-tema (katalog over forelder tema - det vil ikke bli endret)
          • functions.php
          • header.php
          • style.css
          • andre malfiler ...
        • foo-tema-barn (katalog av vår barn tema)
          • functions.php (filen vi skal bruke for å tilpasse overordnet temaet)
          • header.php (overstyrer header.php for overordnet tema)
          • style.css (dette er en obligatorisk fil i et barntema og må bli navngitt style.css)

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

1. Fjern temafunksjoner

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'); 

2. Fjern egendefinerte innleggstyper og taksonomier

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'); 

3. Fjern menyer

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).


4. Fjern Widgets og Sidebar

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);

5. Fjern snarveier

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 ;-).


6. Fjern ytterligere bildestørrelser

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); 

7. Fjern metaboxene

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.


8. Fjern JavaScripts og CSS Stylesheets

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.


9. Fjern foreldre tema handlinger og filtre

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.


referanser

  • Barnemner Grunnleggende og Opprett Barnemner i WordPress
  • WordPress Codex-dokumentasjon
    • 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
  • En samling av WordPress-foreldetemaer
  • Tematisk temaramme