Hoe het gedrag van het ouderthema te veranderen binnen het kindthema

Wat zijn kind thema's? Kindthema's zijn een nuttige WordPress-functie waarmee ontwikkelaars een nieuwe sjabloon kunnen maken zonder helemaal opnieuw te hoeven beginnen, maar door gebruik te maken van alle functies die al beschikbaar zijn in een bestaand thema.

Soms echter, de ouder thema we hebben gekozen voor onze site kan enkele functies hebben die we niet nodig hebben (of we moeten aanpassen aan onze behoeften), bijvoorbeeld aangepaste berichttypen met een andere slug, shortcodes, JavaScript-bibliotheken, afbeeldingen die we niet gebruiken t gebruik en ga zo maar door ...


Personaliseer het thema op twee manieren

Hoewel het gemakkelijk kan zijn om te bereiken wat we willen door het thema rechtstreeks te bewerken, is het ook waar dat telkens wanneer het thema wordt bijgewerkt, we alle aanpassingen opnieuw moeten doen. Dit kan frustrerend zijn, dus er is nog een andere optie: we kunnen een maken kind thema en gebruik de > functions.php> bestand om de te wijzigen ouder thema Kenmerken. Op deze manier kunnen we het hoofdthema upgraden telkens wanneer een nieuwe versie wordt uitgebracht zonder onze aanpassingen te verliezen.

Voordat we ingaan op meer specifieke details, een korte opmerking over het uiterlijk van het thema: we kunnen kleuren, achtergronden, typografie en de lay-out via de style.css bestand van het kindthema door de ouder te importeren style.css en het overschrijven van de stijlen die we willen veranderen.

Voor meer controle over de lay-out, kunnen we ook volgen hoe Abbas Suterwala in zijn post suggereert en de bovenliggende aangepaste sjabloonbestanden klonen in ons kindthema:

Vervolgens kan het onderliggende thema optioneel andere sjabloonbestanden overschrijven zoals author.php, category.php, enz. Het WordPress-framework zoekt eerst naar een sjabloonbestand in de onderliggende themadirectory en vervolgens, als het niet wordt gevonden, wordt het opgehaald uit de bovenliggende map.


Wat we kunnen veranderen

Door het thema van het kind functions.php bestand dat we kunnen behandelen:

  • Thema-functies
  • Aangepaste berichttypen en taxonomieën
  • Menu's en zijbalken
  • widgets
  • shortcodes
  • Extra beeldformaten
  • Metaboxes
  • JavaScript en CSS
  • Bovenliggende thema-acties en filters

Laten we zeggen dat we de structuur van deze website hebben:

  • htdocs OF www
    • wp-content
      • thema's
        • foo-theme (map van de ouder thema - het zal niet worden gewijzigd)
          • functions.php
          • header.php
          • style.css
          • andere sjabloonbestanden ...
        • foo-theme-kind (map van onze kind thema)
          • functions.php (het bestand dat we zullen gebruiken om het ouderthema aan te passen)
          • header.php (overrides header.php voor het ouderthema)
          • style.css (dit is een verplicht bestand in een kindthema en moet een naam hebben style.css)

Laten we beginnen: maak een leeg functions.php bestand in de / Wp-content / themes / foo-theme-kind / directory.

Voor het grootste deel zullen we een generiek gebruiken wp_tuts_remove_features () functie, verslaafd aan de WordPress after_setup_theme actie. We hebben ook vastgesteld 10 als een derde parameter (prioriteit), dus we zijn er zeker van dat de functie wordt getriggerd vóór de eerste.

 add_action ('after_setup_theme', 'remove_parent_theme_features', 10); function remove_parent_theme_features () // onze code hier

1. Verwijder themafuncties

Sommige ouderthema's voegen functies toe aan WordPress via de add_theme_support functie.

Beschikbare functies zijn:

  • post-formats
  • post-thumbnails
  • eigen achtergrond
  • custom-header
  • automatische-feed-koppelingen

Dus om ze te verwijderen, kunnen we de remove_parent_theme_features () functie in de functions.php het dossier.

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

2. Aangepaste berichttypen en taxonomieën verwijderen

Het verwijderen van aangepaste berichttypen en aangepaste taxonomieën is eenvoudig: als de ouder functions.php bestand voegt een toe Film aangepast berichttype, via een parent_movie_add_post_type () functie:

 // PARENT functions.php add_action ('after_setup_theme', 'parent_movie_add_post_type'); functie parent_movie_add_post_type () $ parent_args = array (// andere argumenten ... 'rewrite' => array ('slug' => 'movie'), 'supports' => array ('title', 'editor', 'author' , 'uittreksel')); register_post_type ('film', $ parent_args); 

... we kunnen het aanpassen dankzij ons kind functions.php het dossier:

 // CHILD functions.php function remove_parent_theme_features () // verwijder Movie Custom Post Type remove_action ('init', 'parent_movie_add_post_type'); / * als alternatief kunnen we ons aangepaste berichttype toevoegen om slechts enkele aspecten van de parent-functie * / add_action ('init', 'child_movie_post_type') te overschrijven;  function child_movie_post_type () $ child_args = array (// andere argumenten ... // verander Custom Post slug 'rewrite' => array ('slug' => 'kinderfilm'), // verwijder fragmenten en voeg postduimen toe ' ondersteunt '=> array (' title ',' editor ',' author ',' thumbnail ')); register_post_type ('film', $ child_args); 

We kunnen ook alleen bepaalde functies verwijderen zonder het posttype ongedaan te maken, bijvoorbeeld als we het fragmentveld willen vervangen door een post-featured afbeelding, kunnen we de functie op deze manier wijzigen:

 functie remove_parent_theme_features () add_action ('init', 'wp_tuts_remove_post_feature');  function wp_tuts_remove_post_feature () // verwijder fragment remove_post_type_support ('movie', 'excerpt'); // post duimen toevoegen add_post_type_support ('film', 'thumbnail'); 

Je kunt een complete lijst met verwijderbare functies vinden onder remove_post_type_support in de WordPress Codex.

Net als bij aangepaste berichttypen, kunt u een aangepaste taxonomie die in het bovenliggende thema is toegevoegd, verwijderen met een parent_taxonomy () functie, op deze manier:

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

3. Verwijder menu's

We kunnen het menu van een ouderthema verwijderen via de unregister_nav_menu () functie. Deze functie neemt één parameter, de menulocatie-id slug gebruikt in de register_nav_menu () functie.

Als het bovenliggende thema een a registreert Header Menu:

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

We kunnen het op deze manier verwijderen:

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

Om geregistreerde menu's te identificeren, kunnen we de parent-themacode doorzoeken register_nav_menu () noemt. Het eerste argument van de functie vertegenwoordigt de menu-ID die we kunnen gebruiken om de registratie ongedaan te maken (in dit geval header-menu).


4. Widgets en zijbalken verwijderen

WordPress wordt geleverd met enkele standaard Widgets die we kunnen deactiveren. Ons ouderthema kan ook zijn eigen widgets toevoegen, zodat we in de themabestanden kunnen zoeken naar waar ze zijn gedeclareerd en kennis hebben van hun naam. Meestal worden ze gedeclareerd in een PHP-klasse die het WP_Widget klasse:

 // PARENT-themaklasse ParentWidgetName verlengt WP_Widget // widgetcode

Om de registratie van de widget ongedaan te maken, gebruiken we de klassenaam ParentWidgetName:

 add_action ('widgets_init', 'wp_tuts_parent_unregister_widgets', 10); functie wp_tuts_parent_unregister_widgets () // verwijder (een paar) WordPress standaard Widgets unregister_widget ('WP_Widget_Pages'); unregister_widget ('WP_Widget_Calendar'); // remove Parent registered Widget unregister_widget ('ParentWidgetName'); // registreer een aangepaste Widget (indien nodig) register_widget ('MyCustomWidget');  // vergeet niet om de Widget Class-klasse toe te voegen MyCustomWidget breidt WP_Widget uit // aangepaste Widget-code

Voor sidebars is de actie vergelijkbaar:

 add_action ('widgets_init', 'wp_tuts_parent_unregister_sidebars', 10); function wp_tuts_parent_unregister_sidebars () // verwijder een zijbalk geregistreerd door het bovenliggende thema unregister_sidebar ('first-footer-widget-area'); 

Om geregistreerde zijbalken te identificeren, kunnen we de code van het ouderthema doorzoeken register_sidebar () calls.

Alles wat we nodig hebben is om kennis te nemen van de zijbalk ID:

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

5. Verwijder shortcodes

Het opheffen of verwijderen van shortcodes is eenvoudig, we hoeven alleen onze functie op deze manier aan te passen:

 function remove_parent_theme_features () // verwijder de parent [gmap] shortcode remove_shortcode ('gmap'); // voeg onze [gmap] shortcode add_shortcode toe ('gmap', 'child_shortcode_gmap');  function child_shortcode_gmap ($ atts) // maak onze shortcode die de bovenliggende one overschrijft

Om geregistreerde shortcodes te identificeren, kunnen we de parent-themacode doorzoeken add_shortcode () noemt. De eerste parameter is degene die we zoeken ;-).


6. Verwijder extra beeldformaten

Als het bovenliggende thema nieuwe afbeeldingsformaten toevoegt die we niet gebruiken in ons kindthema, kunnen we de hoofdthema-code doorzoeken add_image_size () noemt. In dit geval zijn ze: custom_size_parent_1 en custom_size_parent_2. We resetten ze op deze manier:

 add_filter ('intermediate_image_sizes_advanced', 'remove_parent_image_sizes'); functie remove_parent_image_sizes ($ sizes) unset ($ sizes ['custom_size_parent_1']); unset ($ sizes ['custom_size_parent_2']); keer $ maten terug; 

Dit is handig, want elke keer dat de gebruiker een afbeelding uploadt, maakt WordPress geen extra afbeeldingsformaten die we niet gebruiken.

Om aangepaste beeldgroottes te maken, kunnen we dit bij ons kind toevoegen functions.php het dossier:

 if (function_exists ('add_image_size')) // 400 pixels breed en onbeperkte hoogte add_image_size ('custom_size_child_1', 400, 9999); // 320 pixels breed en 240 px hoog, bijgesneden add_image_size ('custom_size_child_2', 320, 240, true); 

7. Verwijder Metaboxen

Door het remove_meta_box () functie kunnen we de standaard metaboxen van WordPress en bovenliggende thema's verwijderen.

Een lijst met standaard metaboxen van WordPress is beschikbaar onder remove_meta_box () in de WordPress Codex. De functie heeft drie argumenten: de metabox-ID, de pagina waarvan deze zal worden verwijderd, de bewerkingscontext (normaal, gevorderd, kant).

Als het bovenliggende thema metaboxen toevoegt in het berichtbewerkingsscherm, kunnen we ze op deze manier uitschakelen:

 add_action ('admin_menu', 'wp_tuts_remove_metaboxes', 99); functie wp_tuts_remove_metaboxes () // verwijder standaard WP Trackback Metabox van Berichten bewerkingspagina remove_meta_box ('trackbacksdiv', 'post', 'normaal'); // verwijder een bovenliggend thema Metabox 'parent_post_foo_metabox' remove_meta_box ('parent_post_foo_metabox', 'post', 'normal'); 

We kunnen oudermetaboxen identificeren door voor de parent-themacode te zoeken add_meta_box of add_meta_boxes () calls.

De ID van de te verwijderen metabox is het eerste argument van de add_meta_box () functie.


8. JavaScript en CSS Stylesheets verwijderen

Als het bovenliggende thema JavaScript- en CSS-stijlen toevoegt die we niet nodig hebben:

 // PARENT functions.php add_action ('wp_print_scripts', 'parent_scripts'); add_action ('wp_print_styles', 'parent_styles'); functie 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'); 

We kunnen ze op deze manier verwijderen:

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

Om geregistreerde JavaScripts en CSS-stijlen te identificeren, kunnen we de parent-themacode doorzoeken wp_enqueue_script () en wp_enqueue_style () calls.

Het eerste argument van de functie is wat we kunnen gebruiken in de wp_deregister_script () of wp_deregister_style () functies.


9. Oudtethema-acties en -filters verwijderen

Sommige thema's, zoals Thematisch, bieden verschillende hooks om het themagebeuren aan te passen zonder de themabestanden te wijzigen. In dit geval biedt Thematic een thematic_header actie die andere acties laadt:

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

We zullen niet gedetailleerd onderzoeken wat deze functies doen, waarschijnlijk drukken sommige van hen wat info in de blogkop: naam, beschrijving, enzovoort ... In dit geval kunnen we de functie deactiveren thematic_blogdescription () functioneer op deze manier:

 // Unhook default Thematische functiefunctie unhook_thematic_functions () // we plaatsen het positienummer van de originele functie (5) // om prioriteitsredenen remove_action ('thematic_header', 'thematic_blogdescription', 5);  add_action ('init', 'unhook_thematic_functions');

In deze gevallen kan het moeilijk zijn om de structuur van het ouderthema en hoe het werkt te begrijpen. Mijn advies is om een ​​ouderthema te kiezen dat wordt geleverd met gedetailleerde documentatie, een goed ondersteuningsforum en waarmee haken beschikbaar zijn in de hele code.

Hierdoor verliezen we zeker minder ontwikkeltijd en wordt het aanpassen van het kindthema eenvoudiger.


Referenties

  • Basisbeginselen van childthema's en het maken van kinderthema's in WordPress
  • WordPress Codex-documentatie
    • 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
  • Een verzameling WordPress ouderenthema's
  • Thematisch Themakader