So ändern Sie das Verhalten des übergeordneten Designs innerhalb des untergeordneten Designs

Was sind untergeordnete Themen? Untergeordnete Designs sind eine nützliche WordPress-Funktion, mit der Entwickler eine neue Vorlage erstellen können, ohne von vorne zu beginnen, sondern alle in einem vorhandenen Design bereits vorhandenen Features nutzen.

Manchmal jedoch die übergeordnetes Thema Wir haben für unsere Website einige Funktionen ausgewählt, die wir nicht benötigen (oder wir müssen sie an unsere Bedürfnisse anpassen), beispielsweise benutzerdefinierte Post-Typen mit einem anderen Slug, Shortcodes, JavaScript-Bibliotheken und Bildgrößen, die wir nicht verwenden. t verwenden und so weiter…


Passen Sie das Thema auf zwei Arten an

Es ist zwar leicht zu erreichen, was wir wollen, wenn das Design direkt bearbeitet wird. Es ist jedoch auch richtig, dass jedes Mal, wenn das Design aktualisiert wird, wir alle Anpassungen erneut vornehmen müssen. Das kann frustrierend sein, also gibt es eine andere Möglichkeit: Wir können eine erstellen Kind Thema und benutze die > Funktionen.php> Datei zum Ändern der übergeordnetes Thema Eigenschaften. Auf diese Weise können wir das übergeordnete Design jedes Mal aktualisieren, wenn eine neue Version veröffentlicht wird, ohne unsere Anpassungen zu verlieren.

Bevor wir uns näher mit den Details befassen, eine kurze Anmerkung zum Erscheinungsbild des Themas: Wir können Farben, Hintergründe, Typografie und das Layout über das Symbol ändern style.css Datei des untergeordneten Designs durch Importieren des übergeordneten Elements style.css und die Stile überschreiben, die wir ändern möchten.

Für mehr Kontrolle über das Layout können wir auch verfolgen, wie Abbas Suterwala in seinem Beitrag vorschlägt und die übergeordneten benutzerdefinierten Vorlagendateien in unserem untergeordneten Thema klont:

Dann könnte das untergeordnete Design optional andere Vorlagendateien wie überschreiben author.php, category.php, usw. Das WordPress-Framework sucht zuerst nach einer Vorlagendatei im untergeordneten Designverzeichnis. Wenn es nicht gefunden wird, wird es vom übergeordneten Verzeichnis abgerufen.


Was können wir ändern?

Durch das Kindermotto Functions.php Datei, mit der wir umgehen können:

  • Designfunktionen
  • Benutzerdefinierte Posttypen und Taxonomien
  • Menüs und Seitenleisten
  • Widgets
  • Kurzwahlnummern
  • Zusätzliche Bildgrößen
  • Metaboxen
  • JavaScript und CSS
  • Übergeordnete Themenaktionen und Filter

Nehmen wir an, wir haben diese Website-Struktur:

  • htdocs ODER www
    • WP-Inhalt
      • themen
        • Foo-Thema (Verzeichnis der Elternteil Thema - es wird nicht modifiziert sein)
          • Functions.php
          • header.php
          • style.css
          • andere Vorlagendateien…
        • Foo-Theme-Kind (Verzeichnis unserer Kind Thema)
          • Functions.php (die Datei, die wir zum Anpassen des übergeordneten Designs verwenden werden)
          • header.php (überschreibt header.php für das übergeordnete Thema)
          • style.css (Dies ist eine erforderliche Datei in einem untergeordneten Design und muss benannt werden style.css)

Fangen wir an: Erstelle eine Leere Functions.php Datei in der / wp-content / themes / foo-theme-child / Verzeichnis.

In den meisten Fällen verwenden wir ein Generikum wp_tuts_remove_features () Funktion, mit dem WordPress verbunden after_setup_theme Aktion. Wir setzen auch 10 Als dritten Parameter (Priorität) sind wir sicher, dass die Funktion vor dem übergeordneten ausgelöst wird.

 add_action ('after_setup_theme', 'remove_parent_theme_features', 10); Funktion remove_parent_theme_features () // unser Code hier

1. Entfernen Sie die Themenfunktionen

Einige übergeordnete Designs fügen über Word die Funktionen zu WordPress hinzu add_theme_support Funktion.

Verfügbare Funktionen sind:

  • Postformate
  • Post-Thumbnails
  • benutzerdefinierten Hintergrund
  • benutzerdefinierte Kopfzeile
  • automatische Feed-Links

Um sie zu entfernen, können wir das ändern remove_parent_theme_features () Funktion in der Functions.php Datei.

 function remove_parent_theme_features () remove_theme_support ('post-formates'); remove_theme_support ('post-thumbnails'); remove_theme_support ('custom-background'); remove_theme_support ('custom-header'); remove_theme_support ('automatische Feed-Links'); 

2. Entfernen Sie benutzerdefinierte Beitragstypen und Taxonomien

Das Entfernen von benutzerdefinierten Post-Typen und benutzerdefinierten Taxonomien ist einfach: wenn das übergeordnete Element Functions.php Datei fügt ein Film benutzerdefinierte Postart durch a parent_movie_add_post_type () Funktion:

 // PARENT functions.php add_action ('after_setup_theme', 'parent_movie_add_post_type'); Funktion parent_movie_add_post_type () $ parent_args = array (// andere Argumente… 'rewrite' => array ('slug' => 'movie'), 'unterstützt' => array ('title', 'editor', 'author') , 'Auszug')); register_post_type ('movie', $ parent_args); 

… Wir können es dank unseres Kindes anpassen Functions.php Datei:

 // CHILD functions.php function remove_parent_theme_features () // Entferne den benutzerdefinierten Beitragstyp für Filme remove_action ('init', 'parent_movie_add_post_type'); / * alternativ können wir unseren benutzerdefinierten Beitragstyp hinzufügen, um nur einige Aspekte der übergeordneten Funktion zu überschreiben. * / add_action ('init', 'child_movie_post_type');  function child_movie_post_type () $ child_args = array (// andere Argumente… // // Benutzerdefiniertes Post-Slug ändern 'rewrite' => array ('slug' => 'child-movie'), // Ausschnitte entfernen und Post-Thumbs hinzufügen unterstützt '=> array (' title ',' editor ',' author ',' thumbnail ')); register_post_type ('movie', $ child_args); 

Wir können auch nur bestimmte Features entfernen, ohne den Post-Typ aufzuheben. Wenn Sie beispielsweise das Feld "Auszug" durch ein Post-Feature-Image ersetzen möchten, können Sie die Funktion auf folgende Weise ändern:

 function remove_parent_theme_features () add_action ('init', 'wp_tuts_remove_post_feature');  function wp_tuts_remove_post_feature () // Auszug entfernen remove_post_type_support ('movie', 'excerpt'); // post thumbs hinzufügen add_post_type_support ('movie', 'thumbnail'); 

Eine vollständige Liste der austauschbaren Funktionen finden Sie unter remove_post_type_support im WordPress-Codex.

Ähnlich wie bei benutzerdefinierten Post-Typen können Sie eine im übergeordneten Thema hinzugefügte benutzerdefinierte Taxonomie mit einem entfernen parent_taxonomy () Funktion auf diese Weise:

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

3. Entfernen Sie die Menüs

Wir können das Menü eines übergeordneten Themes durch die entfernen unregister_nav_menu () Funktion. Diese Funktion benötigt einen Parameter, den Menüplatzbezeichner, der im verwendet wird register_nav_menu () Funktion.

Wenn das übergeordnete Thema registriert ist a Header-Menü:

 // PARENT functions.php add_action ('after_setup_theme', 'register_my_menu'); Funktion register_my_menu () register_nav_menu ('Header-Menü', __ ('Header-Menü')); 

Wir können es auf diese Weise entfernen:

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

Um registrierte Menüs zu identifizieren, können wir nach dem übergeordneten Themencode suchen register_nav_menu () Anrufe. Das erste Argument der Funktion stellt die Menü-ID dar, mit der wir die Registrierung aufheben können (in diesem Fall) Header-Menü).


4. Entfernen Sie Widgets und Sidebars

WordPress enthält einige Standard-Widgets, die wir deaktivieren können. Unser übergeordnetes Thema könnte auch eigene Widgets hinzufügen, sodass wir in den Motivdateien suchen können, wo sie deklariert sind, und ihren Namen notieren. Normalerweise werden sie in einer PHP-Klasse deklariert, die die Erweiterung erweitert WP_Widget Klasse:

 // PARENT-Designklasse ParentWidgetName erweitert WP_Widget // Widgetcode

Um die Registrierung des Widgets aufzuheben, verwenden wir den Klassennamen ParentWidgetName:

 add_action ('widgets_init', 'wp_tuts_parent_unregister_widgets', 10); Funktion wp_tuts_parent_unregister_widgets () // remove (einige) WordPress-Standardwidgets unregister_widget ('WP_Widget_Pages'); unregister_widget ('WP_Widget_Calendar'); // Übergeordnetes registriertes Widget entfernen unregister_widget ('ParentWidgetName'); // registriere ein benutzerdefiniertes Widget (falls erforderlich) register_widget ('MyCustomWidget');  // Vergiss nicht, die Widget-Klasse hinzuzufügen. MyCustomWidget erweitert WP_Widget // Benutzerdefinierter Widget-Code.

Bei Seitenleisten ist die Aktion ähnlich:

 add_action ('widgets_init', 'wp_tuts_parent_unregister_sidebars', 10); function wp_tuts_parent_unregister_sidebars () // Entfernen einer vom übergeordneten Thema registrierten Seitenleiste unregister_sidebar ('first-footer-widget-area'); 

Um registrierte Seitenleisten zu identifizieren, können wir den Code des übergeordneten Themas nach durchsuchen register_sidebar () Anrufe.

Alles, was wir brauchen, ist die Sidebar-ID zu beachten:

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

5. Entfernen Sie die Shortcodes

Das Überschreiben oder Entfernen von Shortcodes ist einfach, wir müssen nur unsere Funktion auf diese Weise ändern:

 function remove_parent_theme_features () // entferne den übergeordneten [gmap] shortcode remove_shortcode ('gmap'); // füge unseren [gmap] shortcode add_shortcode hinzu ('gmap', 'child_shortcode_gmap');  function child_shortcode_gmap ($ atts) // Erstelle unseren Shortcode, der den übergeordneten Code überschreibt

Um registrierte Kurzwahlnummern zu identifizieren, können Sie den übergeordneten Themencode nach suchen add_shortcode () Anrufe. Der erste Parameter ist der, nach dem wir suchen ;-).


6. Entfernen Sie zusätzliche Bildgrößen

Wenn das übergeordnete Design neue Bildgrößen hinzufügt, die wir nicht in unserem untergeordneten Design verwenden, können wir nach dem übergeordneten Design-Code suchen add_image_size () Anrufe. In diesem Fall sind dies: custom_size_parent_1 und custom_size_parent_2. Wir setzen sie auf diese Weise zurück:

 add_filter ('intermedi_image_sizes_advanced', 'remove_parent_image_sizes'); Funktion remove_parent_image_sizes ($ size) unset ($ size ['custom_size_parent_1']); nicht gesetzt ($ Größen ['custom_size_parent_2']); $ Größen zurückgeben; 

Dies ist nützlich, da WordPress bei jedem Hochladen eines Bildes keine zusätzlichen Bildgrößen erstellt, die wir nicht verwenden.

Um benutzerdefinierte Bildgrößen zu erstellen, können wir dies in unserem Kind hinzufügen Functions.php Datei:

 if (function_exists ('add_image_size')) // 400 Pixel breit und unbegrenzt hoch add_image_size ('custom_size_child_1', 400, 9999); // 320 Pixel breit und 240 px hoch, zugeschnitten add_image_size ('custom_size_child_2', 320, 240, true); 

7. Entfernen Sie Metaboxen

Durch die remove_meta_box () Mit dieser Funktion können wir sowohl Standard-WordPress- als auch übergeordnete Design-Metaboxen entfernen.

Eine Liste der Standard-Metaboxen von WordPress finden Sie unter remove_meta_box () im WordPress-Codex. Die Funktion hat drei Argumente: die Metabox-ID, die Seite, aus der sie entfernt wird, der Bearbeitungskontext (normal, fortgeschritten, Seite).

Wenn das übergeordnete Design Metaboxen im Nachbearbeitungsbildschirm hinzufügt, können Sie diese auf folgende Weise deaktivieren:

 add_action ('admin_menu', 'wp_tuts_remove_metaboxes', 99); function wp_tuts_remove_metaboxes () // Standard-WP Trackback-Metabox von der Bearbeitungsseite für Beiträge entfernen remove_meta_box ('trackbacksdiv', 'post', 'normal'); // entferne eine übergeordnete Themen-Metabox 'parent_post_foo_metabox' remove_meta_box ('parent_post_foo_metabox', 'post', 'normal'); 

Wir können übergeordnete Metaboxen identifizieren, indem Sie den übergeordneten Themencode nach durchsuchen add_meta_box oder add_meta_boxes () Anrufe.

Die ID der zu entfernenden Metabox ist das erste Argument von add_meta_box () Funktion.


8. Entfernen Sie JavaScripts und CSS-Stylesheets

Wenn das übergeordnete Design JavaScript- und CSS-Stile hinzufügt, die wir nicht benötigen:

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

Wir können sie auf diese Weise entfernen:

 // 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');  function child_overwrite_styles () wp_deregister_style ('fancybox-parent-css'); 

Um registrierte JavaScripts und CSS-Stile zu identifizieren, können Sie den übergeordneten Designcode suchen wp_enqueue_script () und wp_enqueue_style () Anrufe.

Das erste Argument der Funktion ist das, was wir in der verwenden können wp_deregister_script () oder wp_deregister_style () Funktionen.


9. Entfernen Sie die übergeordneten Designaktionen und -filter

Einige Designs, wie z. B. Thematic, bieten mehrere Haken, um das Designverhalten zu ändern, ohne die Designdateien zu ändern. In diesem Fall bietet Thematic a thematic_header Aktion, die andere Aktionen lädt:

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

Wir werden nicht im Detail untersuchen, was diese Funktionen bewirken, wahrscheinlich drucken einige von ihnen einige Informationen in der Kopfzeile des Blogs: Name, Beschreibung usw. In diesem Fall können Sie die Funktion deaktivieren thematic_blogdescription () Funktion auf diese Weise:

 // Standard-Thematische Funktionen aufheben Funktion unhook_thematic_functions () // Wir setzen die Positionsnummer der ursprünglichen Funktion (5) // aus Prioritätsgründen remove_action ('thematic_header', 'thematic_blogdescription', 5);  add_action ('init', 'unhook_thematic_functions');

In diesen Fällen kann es schwierig sein, die Struktur des übergeordneten Designs und seine Funktionsweise zu verstehen. Mein Rat ist, ein übergeordnetes Thema auszuwählen, das mit einer ausführlichen Dokumentation, einem guten Support-Forum und ausführlichen Hooks im gesamten Code ausgeliefert wird.

Dies führt dazu, dass wir weniger Entwicklungszeit verlieren und die Anpassung des untergeordneten Themas einfacher wird.


Verweise

  • Grundlagen zu untergeordneten Themen und zum Erstellen untergeordneter Themen in 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
  • Eine Sammlung von übergeordneten WordPress-Designs
  • Thematischer Themenrahmen