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 ...
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.
Genom barntematets functions.php fil som vi kan hantera:
Så låt oss säga att vi har denna webbplatsstruktur:
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
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');
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');
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
).
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);
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 ;-).
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);
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.
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.
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.
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