Support » Allgemeine Fragen » Page-Template für Child-Theme ohne page.php

  • wordptester

    (@wordptester)


    Hallo,

    ich versuche gerade, ein spezielles Page-Template für ein
    Child-Theme zu beginnen.
    Das Child-Theme läuft.

    Eigentlich wird ein weiteres Template ja dadurch erzeugt, dass die ‚page.php‘
    dupliziert und umbenannt wird.
    Mein (Child-)Theme (von) ‚customizr‘ hat aber keine ‚page.php‘,
    nur Teile wie ‚page_content.php‘ oder ‚header.php‘.
    In diesen werden Änderungen wie gewollt im Frontend angezeigt.
    Aber ich will ja nicht das Original-Theme, bzw. Original-Template ändern, sondern
    im Child-Theme ein weiteres page-template anlegen.

    Wenn ich nun umbenannte Kopien von z.B. ‚page_content.php‘ im jeweiligen Unterordner
    (in der Parallelstruktur des Child-Theme) – sagen wir: ‚page_content-template02.php‘ –
    ändere, hat das Null Wirkung.

    Ich habe auch die index.php (wg. fehlender page.php Rückfall auf index.php)
    dupliziert, in Zeile 2 – 4 ergänzt um
    /**
    * Template Name: template02
    */
    und in Child-Theme-Verzeichnis abgelegt. So bekomme ich schon mal beim Anlegen/Ändern einer Seite im Backend unten rechts diesen Template-Namen zur Auswahl angezeigt.

    Aber irgendeine entscheidende Info fehlt mir hier.

    Für jeden Tipp dankbar
    und BG

    • Dieses Thema wurde geändert vor 7 Monaten von wordptester.
Ansicht von 4 Antworten - 1 bis 4 (von insgesamt 4)
  • Hallo,
    schau doch mal bitte, ob du mit der umfangreichen Antwort von Bego in dem folgenden Beitrag weiter kommst. Wichtig ist in dem Zusammenhang auch die Template-Hierarchie.
    Viele Grüße
    Hans-Gerd

    Moderator Bego Mario Garde

    (@pixolin)

    Child-Themes sollen Parent Themes ergänzen und eine bequeme Art, solche Ergänzungen vorzunehmen ist, Templates des Parent Theme zu kopieren und dann nach Belieben anzupassen. Da aber nicht jeder Theme-Entwickler ein eigenes Template archive.php, page.php, category.php usw. erstellt, sondern vielleicht lieber mit Coditional Tags und eigenen Funktionen eine abweichende Gestaltung für die unterschiedlichen Inhalte umsetzt und vielleicht wie in deinem Fall Template-Parts verwendet, ist diese Methode nicht immer optimal.

    Möchte ich ein eigenes Template, kopiere ich gerne die index.php des Parent Themes (das Template muss ja vorhanden sein) und passe sie nach meinen Vorstellungen an. Dabei geht es vor allem darum, nicht jede Zeile Code neu schreiben zu müssen. Das Template wird unter Umständen <div>-Tags mit eigenen CSS-Klassen verwendern, um z.B. den Inhalt in einem Rahmen („Page Wrapper“) auszugeben. Das nachzuschlagen und abzutippen ist ineffizient, ein vorhandenes Template zu kopieren geht schneller.

    Damit ein Template überhaupt verwenden wird, gibt es zwei Methoden: Entweder gibst du dem Template einen Template Header, also einen Kommentar in dem der Template Name: Mein Template steht. Dann kannst du beim Bearbeiten von Seiten dieses Template manuell auswählen. Oder du überlässt WordPress die automatische Auswahl, wobei WordPress auf die Template Hierarchy zurückgreift.

    Template Hierarchy bedeutet, dass WordPress vor Auslieferung einer Website die Art des Inhalt prüft (handelt es sich um eine statische Seite, einen Beitrag, ein Attachment, eine Kategorie, ein Autorenarchiv, eine Startseite, …) und dann nach einem festgelegten Fallback-Plan nach einem möglichst passenden Template sucht (zum Vergrößen anklicken):

    Template Hierarchy

    Den Plan musst du von links nach rechts lesen: Hast du eine Seite „Impressum“ erstellt und WordPress soll diese Seite darstellen, sucht es zuerst nach einem Template page-impressum.php (entspricht Muster page-{$slug}.php). Gibt es das nicht, sucht WordPress nach einem Template für die ID der Seite (Muster page-{$ID}.php und fällt WordPress sonst auf das allgemeinere page.php zurück oder verwendet das noch allgemeiner singular.php für die Darstellung einzelner Inhalte (im Gegensatz zu Beutragsübersichten etwa auf der Beitragsseite oder in Archiven). Gibt es das auch nicht, wird eben index.php verwendet, das in jedem Theme vorkommen muss.

    Die Suche erfolgt immer zuerst im Child Theme, dann im Parent Theme: Gibt es ein page-impressum.php im Child-Theme? Im Parent-Theme? Gibt es ein page-42.php im Child-Theme? Im Parent Theme? usw.

    Nochmal zusammenfassend: wenn du für eine Seite „Über mich“ ein eigenes Template verwenden möchtest, ist ein möglicher Weg, ein Child-Theme anzulegen, indem du das Template index.php des Parent-Theme kopierst und in page-ueber-mich.php umbenennst. Danach kannst du das Template nach Belieben ändern. Über die Template-Hierarchie wird das Template der Seite automatisch zugewiesen.
    Wenn du für die Seiten Sonne, Strand und Meer eine einheitliche Gestaltung möchtest, die von der Gestaltung aller anderen Seiten abweicht, kopierst du wieder die Datei index.php des Parent-Theme, gibts ihr einen willkürlich gewählten Namen (urlaub.php) und setzt in der Datei einen Template-Header

    <?php
    /**
    * Template Name: Urlaub
    */

    Das Template kannst du dann in der Sidebar den Seiten zuweisen:

    Screenshot Einstellungen

    Thread-Ersteller wordptester

    (@wordptester)

    Danke – so weit, so gut.
    Ich muss also den Fallback von rechts nach links
    (index.php -> singular.php -> page.php -> …) verfolgen, aber 😉

    Ich habe jetzt herausgefunden
    1) Mein Theme: Customizr nutzt als Template (Child Theme) keine page.php,
    sondern Einzelteile, konkret: /templates/parts/content/singular/page_content.php
    2) Um verschiedene page-templates im Child Theme nutzen zu können,
    dupliziere ich also diese Teildatei im child-theme-Verzeichnisbaum
    (rename die neue in: page_content-custchild.php)
    (habe dort also jetzt 2 verschieden benannte Template-Teile)
    und ändere die
    neue Datei (die erste php-Anweisung wird ergänzt um „/** … */“ wie folgt:
    [code]
    <?php
    /**
    * Template Name: custchild
    */
    /**
    * The template for displaying the single page content
    *
    * In WP loop
    */
    ?>
    [/code]

    In beide Template-Teildateien habe ich unterschiedliche <Div>-Container
    geschrieben, um daran zu erkennen, welche der beiden jeweils aufgerufen wird.

    Dann kreiere ich im Backend eine neue Testseite, die ich „custchild“ nenne und
    ordne ihr im Backend unten rechts das Template „custchild“ zu.
    Immerhin wird das neue Template im Backend zur Auswahl im Dropdown angezeigt,
    es wird also als weiteres Template erkannt.

    Trotzdem wird von der Seite im Frontend der Template-Teil „page_content.php“
    genutzt, nicht „page_content-custchild.php“.
    Alle Seiten nutzen das am <Div>-Container erkennbare Standard-Template-Teil.

    Wie finde ich heraus welcher „Pointer“ auch die besondere Seite trotz aller Ergänzungen/Änderungen anweist, das Standard-Modul „page_content.php“ zu verwenden?

    Eine singular.php existiert im Theme nicht. In den index.php-Dateien auf den verschiedenen Ebenen ist der Content immer nur: „silence is golden“.

    Für alle Tipps dankbar.

    Ich muss also den Fallback von rechts nach links
    (index.php -> singular.php -> page.php -> …) verfolgen,

    Nein, eigentlich andersrum: zuerst wird nach page.php gesucht, dann nach singular.php, zuletzt nach index.php.

    Mein Theme: Customizr nutzt als Template (Child Theme) keine page.php,
    sondern Einzelteile

    Dazu hatte ich ja etwas geschrieben:
    Da aber nicht jeder Theme-Entwickler ein eigenes Template archive.php, page.php, category.php usw. erstellt, sondern vielleicht lieber mit Coditional Tags und eigenen Funktionen eine abweichende Gestaltung für die unterschiedlichen Inhalte umsetzt und vielleicht wie in deinem Fall Template-Parts verwendet, ist diese Methode nicht immer optimal.

    dupliziere ich also diese Teildatei im child-theme-Verzeichnisbaum

    Soweit richtig.

    (rename die neue in: page_content-custchild.php)

    Das ist falsch.

    und ändere die
    neue Datei (die erste php-Anweisung wird ergänzt um „/** … */“ wie folgt:

    OK, leider hast du mich da völlig missverstanden. ¯\_(ツ)_/¯

    Die Angabe eines Template-Headers ist nur sinnvoll, wenn du ein eigenständiges Template nimmst und dies individuell einzelnen Seiten zuweisen möchtest.
    Für Template-Parts macht das keinen Sinn.

    Wie finde ich heraus welcher „Pointer“ auch die besondere Seite trotz aller Ergänzungen/Änderungen anweist, das Standard-Modul „page_content.php“ zu verwenden?

    Das kannst du mit dem Plugin Query Monitor anzeigen lassen, wobei sich das Plugin mit der Fülle an Informationen eher an Entwickler richtet. Also von den Daten nicht erschlagen lassen.

    Eine singular.php existiert im Theme nicht.

    Hast du meine Antwort eigentlich gelesen? 🙂

    Nicht jeder Entwickler hält sich an die Template Hierarchy, sondern setzt stattdessen eher auf Conditional Tags und eigene Funktionen. Wenn es kein Template single.php gibt, kannst du trotzdem eines im Child-Theme erstellen. Wie weit das dann zu den vom Entwickler genutzten Conditional Tags passt, musst du im Einzelfall prüfen.

    In den index.php-Dateien auf den verschiedenen Ebenen ist der Content immer nur: „silence is golden“.

    Damit soll erschwert werden, dass Angreifer ein Fingerprinting des Themes machen, um mögliche Sicherheitslücken auszunutzen. Hat der Serveradministrator bei der Einrichtung des Webservers gepennt, werden bei Aufruf eines Webverzeichnisses ohne Index-Datei die vorhandenen Dateien und Verzeichnisse im Browser aufgelistet. Rufe ich z.B. ein Verzeichnis https://example.com/wp-content/themes/customizr/inc/assets/ auf, ist dort aber eine index.php vorhanden, die statt eines Directory-Listings aufgerufen wird. Da die Datei nur einen PHP-Kommentar enthält, bleibt das Browserfenster bei Aufruf des Verzeichnisses leer und der Angreifer kann keine Informationen sammeln.

    Für alle Tipps dankbar.

    Wenn du sie dann auch noch lesen würdest … 😛

Ansicht von 4 Antworten - 1 bis 4 (von insgesamt 4)
  • Das Thema „Page-Template für Child-Theme ohne page.php“ ist für neue Antworten geschlossen.