Hur man ändrar föräldrarnas temat beteende inom barnets tema

Vad är barnteman? Barnteman är en användbar WordPress-funktion som gör det möjligt för utvecklare att bygga en ny mall utan att börja från början, men genom att utnyttja alla funktioner som redan är tillgängliga i ett befintligt tema.

Ibland är dock förälder tema Vi har valt att vår sida kan ha några funktioner som vi inte behöver (eller vi behöver anpassa för att passa våra behov), till exempel anpassade posttyper med en annan slug, kortkoder, JavaScript-bibliotek, bildstorlekar som vi inte t använda och så vidare ...


Anpassa temat på två sätt

Medan det kan vara lätt att uppnå vad vi vill ha genom att redigera temat direkt, är det också sant att varje gång temat kommer att uppdateras måste vi göra alla anpassningar igen. Det kan vara frustrerande, så det finns ett annat alternativ: vi kan skapa en barntema och använd > functions.php> fil för att ändra förälder tema funktioner. På så sätt kan vi uppgradera föräldertemat varje gång en ny version släpps utan att förlora våra anpassningar.

Innan vi går in i mer specifika detaljer, en kort notering om temat utseende: vi kan ändra färger, bakgrunder, typografi och layouten genom style.css fil av barntemat genom att importera föräldern style.css och övertyga de stilar vi vill förändra.

För mer kontroll på layouten kan vi också följa hur Abbas Suterwala föreslår i hans inlägg och klonera de moderna anpassade mallfilerna i vårt barntema:

Då kan barntemat eventuellt åsidosätta andra mallfiler som author.php, category.php, etc. WordPress-ramen söker först en mallfil i barntema-katalogen och sedan om den inte hittas hämtar den den från moderkatalogen.


Vad vi kan ändra

Genom barntematets functions.php fil som vi kan hantera:

  • Tema funktioner
  • Anpassade posttyper och taxonomier
  • Menyer och sidofält
  • widgets
  • kortkoder
  • Ytterligare bildstorlekar
  • slip
  • JavaScript och CSS
  • Föräldrarnas temaåtgärder och filter

Så låt oss säga att vi har denna webbplatsstruktur:

  • htdocs ELLER www
    • wp-innehåll
      • teman
        • foo-theme (katalog över förälder tema - det ska inte ändras)
          • functions.php
          • header.php
          • style.css
          • andra mallfiler ...
        • foo-theme-barn (katalog över vår barn tema)
          • functions.php (den fil som vi ska använda för att anpassa modertemat)
          • header.php (overrides header.php för modertemat)
          • style.css (detta är en obligatorisk fil i ett barntema och måste namnges style.css)

Låt oss komma igång: skapa en tom functions.php fil i / Wp-content / themes / foo-theme-barn / katalog.

För det mesta kommer vi att använda en generisk wp_tuts_remove_features () funktion, ansluten till WordPress after_setup_theme verkan. Vi har också satt 10 som en tredje parameter (prioritet), så vi är säkra på att funktionen utlöses före föräldern.

 add_action ('after_setup_theme', 'remove_parent_theme_features', 10); funktion remove_parent_theme_features () // vår kod här

1. Ta bort Tema-funktioner

Vissa överordnade teman lägger till funktioner i WordPress via add_theme_support fungera.

Tillgängliga funktioner är:

  • post-format
  • post-miniatyrer
  • egen bakgrund
  • custom-header
  • automatisk-flöde-länkar

Så att ta bort dem kan vi ändra remove_parent_theme_features () funktion i functions.php fil.

 funktion 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 ('automatisk matningslänkar'); 

2. Ta bort anpassade inläggstyper och taxonomier

Att ta bort anpassade posttyper och anpassade taxonomier är enkelt: om föräldern functions.php filen lägger till a Film anpassad posttyp, genom en parent_movie_add_post_type () fungera:

 // PARENT functions.php add_action ('after_setup_theme', 'parent_movie_add_post_type'); funktion parent_movie_add_post_type () $ parent_args = array (// andra argument ... 'rewrite' => array ('slug' => 'film'), 'support' => array ('title', 'editor' , 'utdrag' ) ); register_post_type ('movie', $ parent_args); 

... vi kan anpassa det tack vare vårt barn functions.php fil:

 // CHILD functions.php funktion remove_parent_theme_features () // ta bort filmen Anpassad posttyp remove_action ('init', 'parent_movie_add_post_type'); / * Alternativt kan vi lägga till vår anpassade posttyp för att bara skriva över vissa aspekter av moderfunktionen * / add_action ('init', 'child_movie_post_type');  funktion child_movie_post_type () $ child_args = array (// andra argument ... // ändra Custom Post slug 'rewrite' => array ('slug' => 'barnfilm'), // ta bort utdrag och lägg till inläggstumma ' stöder '=> array (' title ',' editor ',' author ',' miniatyrbild ')); register_post_type ('movie', $ child_args); 

Vi kan även ta bort vissa funktioner utan att avregistrera posttypen, till exempel om vi vill ersätta utdragsfältet med en post-featured bild kan vi ändra funktionen på så sätt:

 funktion remove_parent_theme_features () add_action ('init', 'wp_tuts_remove_post_feature');  funktion wp_tuts_remove_post_feature () // ta bort utdrag remove_post_type_support ('movie', 'excerpt'); // lägg till inläggsmenyn add_post_type_support ('movie', 'thumbnail'); 

Du kan hitta en komplett lista över flyttbara funktioner under remove_post_type_support i WordPress Codex.

På samma sätt som anpassade posttyper kan du ta bort en anpassad taxonomi som läggs till i modertemat med en parent_taxonomy () funktion, på så sätt:

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

3. Ta bort menyer

Vi kan ta bort ett förlagets menys meny genom unregister_nav_menu () fungera. Den här funktionen tar en parameter, menyns platsidentifierare som används i register_nav_menu () fungera.

Om föräldrets tema registrerar a Header-menyn:

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

Vi kan ta bort det på följande sätt:

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

För att identifiera registrerade menyer kan vi söka överordnatema för register_nav_menu () samtal. Funktionens första argument representerar det meny-ID som vi kan använda för att avregistrera (i det här fallet header-menyn).


4. Ta bort widgetar och sidofält

WordPress kommer med några standard Widgets som vi kan avaktivera. Dessutom kan vårt föräldertema lägga till egna widgets, så vi kan söka i temafilerna och leta efter var de deklareras och notera deras namn. Vanligtvis deklareras de i en PHP-klass som utökar WP_Widget klass:

 // PARENT temaklass ParentWidgetName utökar WP_Widget // widget code

Så, för att avregistrera widgeten använder vi klassnamnet ParentWidgetName:

 add_action ('widgets_init', 'wp_tuts_parent_unregister_widgets', 10); funktion wp_tuts_parent_unregister_widgets () // ta bort (några) WordPress standard Widgets unregister_widget ('WP_Widget_Pages'); unregister_widget ('WP_Widget_Calendar'); // Ta bort föräldrars registrerade Widget unregister_widget ('ParentWidgetName'); // registrera en anpassad widget (om det behövs) register_widget ('MyCustomWidget');  // glöm inte att lägga till klassen Widget Class MyCustomWidget utökar WP_Widget // Custom Widget code

För sidofält är åtgärden liknande:

 add_action ('widgets_init', 'wp_tuts_parent_unregister_sidebars', 10); funktion wp_tuts_parent_unregister_sidebars () // ta bort ett sidofält som registrerats av föräldrarnas tema unregister_sidebar ("first-footer-widget-området"); 

För att identifiera registrerade sidfält kan vi söka överliggande temat kod för register_sidebar () samtal.

Allt vi behöver är att notera sidofältet ID:

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

5. Ta bort kortnummer

Det är enkelt att överstyra eller ta bort kortnummer, vi behöver bara ändra vår funktion på så sätt:

 funktion remove_parent_theme_features () // ta bort föräldern [gmap] shortcode remove_shortcode ('gmap'); // lägg till vår [gmap] shortcode add_shortcode ('gmap', 'child_shortcode_gmap');  funktion child_shortcode_gmap ($ atts) // skapa vår kortnummer som överstiger föräldern

För att identifiera registrerade kortkoder kan vi söka överordnatema för add_shortcode () samtal. Den första parametern är den vi är efter ;-).


6. Ta bort ytterligare bildstorlekar

Om modertemat lägger till nya bildstorlekar som vi inte använder i vårt barntema kan vi söka överordnatema för add_image_size () samtal. I det här fallet är de: custom_size_parent_1 och custom_size_parent_2. Vi återställer dem på följande sätt:

 add_filter ('intermediate_image_sizes_advanced', 'remove_parent_image_sizes'); funktion remove_parent_image_sizes ($ storlekar) unset ($ sizes ['custom_size_parent_1']); unset ($ storlekar ['custom_size_parent_2']); returnera $ storlekar; 

Det här är användbart eftersom varje gång användaren laddar upp en bild skapar inte WordPress ytterligare bildstorlekar som vi inte använder.

För att skapa anpassade bildstorlekar kan vi lägga till det i vårt barn functions.php fil:

 om (function_exists ('add_image_size')) // 400 pixlar bred och obegränsad höjd add_image_size ('custom_size_child_1', 400, 9999); // 320 pixlar bred och 240 px lång, beskuren add_image_size ('custom_size_child_2', 320, 240, true); 

7. Ta bort metaboxer

Genom remove_meta_box () funktionen kan vi ta bort både standard WordPress och parentes-metaboxer.

En lista över WordPress standardmetaboxer finns under remove_meta_box () i WordPress Codex. Funktionen har tre argument: Metabox ID, den sida den kommer att tas bort från, redigeringskontexten (vanligt, Avancerad, sida).

Om modertemat lägger till metaboxer i skärmen efter redigering kan vi inaktivera dem på följande sätt:

 add_action ('admin_menu', 'wp_tuts_remove_metaboxes', 99); funktion wp_tuts_remove_metaboxes () // ta bort standard WP Trackback Metabox från Inlägg redigering sida remove_meta_box ('trackbacksdiv', 'post', 'normal'); // Ta bort en parentemetabell 'parent_post_foo_metabox' remove_meta_box ('parent_post_foo_metabox', 'post', 'normal'); 

Vi kan identifiera föräldra metaboxer genom att söka överordnatema för add_meta_box eller add_meta_boxes () samtal.

ID för metabox att ta bort är det första argumentet för add_meta_box () fungera.


8. Ta bort JavaScripts och CSS Stylesheets

Om föräldertemat lägger till JavaScript och CSS-format som vi inte behöver:

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

Vi kan ta bort dem på följande sätt:

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

För att identifiera registrerade JavaScripts och CSS-stilar kan vi söka överordnatema för wp_enqueue_script () och wp_enqueue_style () samtal.

Funktionens första argument är vad vi kan använda i wp_deregister_script () eller wp_deregister_style () funktioner.


9. Ta bort moderåtgärder och filter

Vissa teman, som tematiska, ger flera krokar för att ändra temat beteende utan att ändra temafilerna. I det här fallet ger tematiska a thematic_header Åtgärd som laddar andra åtgärder:

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

Vi kommer inte att undersöka i detalj vad dessa funktioner gör, förmodligen kan vissa av dem skriva ut någon info i bloggrubriken: namn, beskrivning osv. I det här fallet kan vi deaktivera thematic_blogdescription () funktion på detta sätt:

 // Unhook default Tematiska funktioner funktion unhook_thematic_functions () // vi placerar positionsnumret för den ursprungliga funktionen (5) // för prioriterade skäl remove_action ('thematic_header', 'thematic_blogdescription', 5);  add_action ('init', 'unhook_thematic_functions');

I dessa fall kan det vara svårt att förstå strukturen hos modertemat och hur det fungerar. Mitt råd är att välja ett föräldertema som skickas med detaljerad dokumentation, ett bra supportforum och gör krokar tillgängliga i hela koden.

Det får oss säkert att förlora mindre utvecklingstid och göra anpassningen av barntemat enklare.


referenser

  • Barnteman Grunderna och skapa barnteman i WordPress
  • WordPress Codex-dokumentation
    • 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-föräldrarnas teman
  • Tematisk temainram