DRY Code für Templates

  • In einem Child Theme von twentyseventeen erstelle ich die Inhalte mehrerer Seiten (Team, Geschichte, ...) mit selbstgeschriebenen Templates (template-team.php, template-history.php, ...).
    Jedes dieser Templates beinhaltet um den eigentlichen, spezifischen HTML/PHP Code, einige Zeilen, die immer gleich sind:

    Besteht die Möglichkeit, diesen gemeinsamen Code irgendwohin auszulagern (z.B. in functions.php), damit er nur 1x vorkommt, und bei einem Seitenaufruf mit dem spezifischen HTML/PHP Code zusammengeführt wird?
    Ich dachte da z.B. an einen template_include Filter, bin mir aber nicht sicher, wie das gehen soll.

    Herzlichen Dank!

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Z.B. einfach mit get_template_part(); (also in den jeweiligen Seitentemplates, über get_template_part(); wird dann dieser gleichbleibende Teil aufgerufen.)

    Gruß
    helix

  • Also das hiesse in meinem Fall zwei neue Templates erstellen (öffnender und schliessender HTML Code), welche ich in meinen Seiten-Templates einbinde und dazwischen dann den spezifischen Code schreibe?

    [COLOR=#000000][COLOR=#0000BB]<?php get_template_part('opening');[/COLOR][COLOR=#007700] [/COLOR][COLOR=#0000BB]?>[/COLOR][/COLOR]

    [COLOR=#000000]HERE WOULD COME THE SPECIFIC TEMPLATE CODE[/COLOR]

    [COLOR=#000000][COLOR=#0000BB]<?php get_template_part('closing');[/COLOR][COLOR=#007700] [/COLOR][COLOR=#0000BB]?>[/COLOR][/COLOR]

    Geht das nicht eleganter?
    Danke für den Hinweis, helix.

  • Was ist elegant? (In diesem Zusammenhang)

    Ich hatte deine Anfrage „verkehrt herum“ verstanden, d.h. dass im Prinzip der Loop immer gleich ist.
    Was spricht dagegen, die gleichbleibenden Teile jeweils in die header.php bzw. footer.php mit reinzunehmen?

    Und dann kannst du auch ein Konstrukt wie „loop-page.php“ machen.
    Rufst du auch über get_template_part(); auf. Und „sagst“ deinem System dann, dass dieser Template-Part, wenn vorhanden, loop-pageslug.php heißt; wenn es keine Datei mit dem passenden Pageslug gibt, wird der Standard-Loop ausgegeben.

    Wäre hilfreich, du liest dich mal über get_template_part(); ein.
    https://developer.wordpress.org/reference/func…_template_part/

    Da stößt du dann z.B. auf https://developer.wordpress.org/reference/func…ocate_template/, da steht im Prinzip genau drin, was du brauchst … (naja, nicht gaaaanz, aber wer sich schon an eigene Seitentemplates wagt, dem sollte man doch ein bisschen Fähigkeit zu Übertragungsleistungen und eigener Recherche zutrauen?

    Gruß
    helix

  • Zu meiner Ehrrettung: Natürlich habe ich mich eingelesen, aber man wird ja noch fragen dürfen, ob es für ein konkretes Anliegen allenfalls noch eine bessere Variante gibt ;-)

    Elegant im Sinne von, dass ich es so verstehe, dass im Normalfall über get_template_part() abgeschlossene Code-Bausteine an mehreren Orten eingebunden werden können.
    In meinem Fall besteht der Part 'opening' aus diesem (nicht abgeschlossenen) Teil:

    PHP
    [COLOR=#000000][COLOR=#0000BB]<?php get_header[/COLOR][COLOR=#007700](); [/COLOR][COLOR=#0000BB]?>
    [/COLOR]
    <div class="wrap">
      <div id="primary" class="content-area">
        <main id="main" class="site-main" role="main">
            <header class="entry-header">
                <h1 class="entry-title">Team</h1>
            </header>[/COLOR]

    und der schliessende Part 'closing' aus

    PHP
    </main><!-- #main -->
        </div><!-- #primary -->
    </div><!-- .wrap -->
    
    
    <?php get_footer(); ?>

    Es geht natürlich, aber ich find's nicht sonderlich schön.

    Gruss
    ricochet

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!