Support » Allgemeine Fragen » Eigenen PHP-Content in Custom Template darstellen

  • Gelöst sabineline

    (@sabineline)


    Und erneut habe ich ein offenbar sehr spezielles Problem, da Google mir nicht hilft:

    Ich erstelle Seiten nach dem Muster:
    – Stadt1
    – Stadt2
    – Stadt3

    Jede dieser Seiten hat Unterseiten entsprechend gewisser Kriterien. So gibt es z. B.:
    – Stadt1
    — Stadt1-Unterseite-Blumenladen
    — Stadt1-Unterseite-Supermarkt
    – Stadt2
    — Stadt2-Unterseite-Blumenladen
    — Stadt2-Unterseite-Tankstelle
    -Stadt3
    — Stadt3-Unterseite-Tankstelle
    — Stadt3-Unterseite-Kneipe
    — Stadt3-Unterseite-Taxistand

    Ich habe ein Template erstellt (template-city.php), welches ich all diesen Seiten zuweise (sowohl den Ober- als auch den Unterseiten).

    Im Code des Templates ermittle ich dann mittels $pagename, ob es sich um Unterseite handelt oder nicht.
    Wenn nein, soll ein Standardbegrüßungstext erscheinen, wenn ja, wird ermittelt, was für eine Unterseite (erneut anhand von $pagename) und dann möchte ich jeweils sehr spezifische Dinge anzeigen.
    Sowohl simple PHP-echo-Statements als auch Shortcodes – etwa für Caldera Forms – via
    echo do_shortcode("[caldera_form id='CF5f27c37c5cf36']");

    Das Problem: Ich arbeite hier nicht mit Posts oder sonst etwas, sondern wirklich hartgecodetem PHP-Content und weiß nicht, an welcher Stelle ich ihn im Template (das auf dem Standard-Template des Themes Twenty Twenty basiert) einbauen kann, damit er ordentlich angezeigt wird.
    Momentan wird er nämlich immer ungestylet unter dem eigentlichen Seitenbereich (der außer dem Seitenmenü-Widget ja leer ist, da keine Posts existieren) angezeigt und geht dort auch über die ganze Breite.

    Das einzig hoffnungsvolle Google-Ergebnis führte zum Fazit, ich müsse mich mit dem „Loop“ noch mehr auseinandersetzen und ihn komplett verstehen, aber der greift ja auch nur existierende Posts ab. Oder sehe ich das falsch?

    Wie kann ich meinen Content, den ich im Template zurechtgecodet habe, normal gestylet auf jeder Seite, die mein Template zugeordnet hat, anzeigen, so als wäre es „normaler Seiteninhalt“?

    • Dieses Thema wurde geändert vor 3 Jahren, 5 Monaten von sabineline.
Ansicht von 9 Antworten - 1 bis 9 (von insgesamt 9)
  • Hallo,
    hast du dich denn schon eingehender mit der Template-Hierarchie beschäftigt?
    Das wäre der erste Ansatz für dein Vorhaben.
    Viele Grüße
    Hans-Gerd

    Thread-Starter sabineline

    (@sabineline)

    Hi Hans-Gerd Gerhards,

    ja, aber die besagt doch nur, in welcher Reihenfolge (also mit welchen Fallbacks) WordPress sich entscheidet, welches Template überhaupt auf eine entsprechende Seite angewendet wird, nicht aber, wie mein Content innerhalb des Templates korrekt dargestellt wird.

    Naja, mit einer geeigneten Benennung der Templates brauchst du sie zumindest nicht mehr manuell zuweisen. Das wäre schon mal ein kleiner Erfolg.
    Ansonsten ist das alles recht abstrakt, weil „wirklich hartgecodeter PHP-Content“ so ziemlich alles Mögliche sein kann.

    So ein Städteportal kann ja auch aus Custom Post Types mit Custom Taxonomy bestehen. Statt normaler Eingabefelder machen vielleicht Metaboxen für Custom Fields Sinn, in denen du halbwegs standardisiert Inhalte sammelst und dann durch passende Abfragen im Template so aufbereitest, dass daraus anschauliche Webseiten werden.
    Das Pods Framework war vor einer Weile ein interessanter Ansatz, um Custom Post Types miteinander zu verbinden. Vielleicht kommt das in Frage, wenn du z.B. einen eigenen Post Type „Tankstellen“ mit einem anderen Post Type „Städte“ verknüpfen möchtest. Aber da ausführlich drauf einzugehen, sprengt hier auch ein wenig den Rahmen. „Hat geholfen, danke!“ schreibt sich schneller, als ausführliche Antworten. 😉

    Thread-Starter sabineline

    (@sabineline)

    Hallo Bego Mario Garde,

    touché zu der Sache mit „Hat geholfen, danke!“ – die Anspielung habe ich verdient. 😀 Ich war heute Nachmittag leider einfach etwas in Eile. Tatsächlich hat mir das aber sehr geholfen und ich wollte wenigstens etwas dazu schreiben, als ich das Thema als gelöst markierte. 😛

    Zu diesem Thema: Ich fürchte, ich habe kein großes Talent darin gezeigt, zu erklären, was genau mein Ziel ist, denn ich denke mal, es sollte eigentlich ganz simpel sein, das hinzukriegen, ich weiß nur nicht wie.

    Darum hier mal als Beispiel ein simpler Screenshot, in dem ich vorher mittels Chrome-Entwicklertools zwei Hinweise platzierte:

    Screenshot

    Dort, wo ich HINWEIS 1 hingeschrieben habe … genau dort soll etwas landen, das ich im Quellcode des Templates schreibe, z. B. ein
    echo "Hallo Welt";
    Das ist wirklich schon alles, was ich möchte. Ganz simpel (hatte ich zumindest gehofft).
    Dort wo HINWEIS 2 steht (vielleicht nicht gleich zu erkennen: Unter dem weiß hinterlegten Bereich ganz links) landet es leider momentan.
    Also, wie bekomme ich es oben in den weißen Bereich, links von meinem Seitenmenü – genau genommen ins DIV-Element mit der Klasse entry-content?

    • Diese Antwort wurde geändert vor 3 Jahren, 5 Monaten von sabineline.
    • Diese Antwort wurde geändert vor 3 Jahren, 5 Monaten von sabineline.

    … ich wollte wenigstens etwas dazu schreiben, als ich das Thema als gelöst markierte

    Alles gut. Ich freue mich, wenn ich zumindest irgendeine Rückmeldung bekomme. Das ist leider oft (bei anderen Teilnehmenden hier) nicht so.

    … als Beispiel ein simpler Screenshot,

    Ja, sieht soweit simpel aus. Städte würde ich als eigene Inhaltsart (Custom Post Type) anlegen und das was in der Sidebar steht wahrscheinlich einfach als Post Meta mit Custom Fields (und ggf. Plugin Advanced Custom Fields).

    Dort, wo ich HINWEIS 1 hingeschrieben habe … genau dort soll etwas landen, das ich im Quellcode des Templates schreibe

    Dazu kannst du (sehr vereinfacht dargestellt) in der functions.php (oder anderen Dateien, die du einbindest) eine Funktion anlegen – sinngemäß sowas wie

    function my_hinweis1() {
      return "Hinweis 1";
    }

    unterbringen und dann im Template oberhalb der Loop echo my_hinweis1().

    Shortcodes würde ich nur verwenden, wenn du „Hinweis 1“ auch irgendwo mitten im Text unterbringen möchtest. Dem do_shortcode() ist immer der Aufruf der in add_shortcode() hinterlegten PHP-Funktion vorzuziehen.

    Also, wie bekomme ich es oben in den weißen Bereich, links von meinem Seitenmenü – genau genommen ins DIV-Element mit der Klasse entry-content?

    Wenn du eigene Templates in einem (Child-)Theme schreibst, bist du bei der Platzierung solcher Funktion frei. Pack ein echo my_hinweis2(); dahin, wo du es brauchst.

    Thread-Starter sabineline

    (@sabineline)

    Ernsthaft? Das ist bedauerlich. Und beschämend für diejenigen, denn ich (bin ja erst seit Kurzem hier), bin schlichtweg begeistert, wie schnell und qualitativ man hier Antworten bekommt.

    Also zu deinen Tipps:
    Ja, man könnte es bestimmt auch mit Pods usw. lösen, aber meine Kernfrage ist nur, wie ich etwas ins Template schreiben kann, ohne dass es vor oder nach dem weißen Content-Kästchen landet, sondern darin.

    Ob ich ein echo in eine Funktion auslagere und die Funktion aufrufe, oder direkt ein echo ins Template schreibe, sollte doch keinen Unterschied machen, ob das ganze ins Content-DIV wandert, oder nicht?

    Statt die CODE-Tags hier zu nutzen, habe ich mal den relevanten Teil meines Templates in ein pastebin gepackt, damit wir uns auch über Zeilen verständigen können:

    Klick mich

    Das echo in Zeile 55 … in welche Zeile müsste ich es packen, damit das „Test“ dort steht, wo in meinem vorherigen Screenshot „Hinweis1“ steht?
    Oder geht das einfach nicht, wie ich mir das vorstelle?
    Kann ich das gar nicht bewerkstelligen, ohne den Umweg über Posts/Pods/wasauchimmer in WordPress zu nehmen?

    Das ist so etwas schwierig zu bewerten, weil ich den restlichen Code nicht sehe.

    In Zeile 7 lädst du einen Template-Part – das kann ein komplettes HTML-Gerüst sein, dass den ganzen Seiteninhalt abbildet. Wenn du erst danach mit deiner Zeile 55 echo "Test" kommst, sind die <div>-Tags des Template-Part wieder geschlossen und deine Ausgabe kommt außerhalb des weißen Bereichs. Ab Zeile 19 wiederholt sich das: wieder <div>-Tags und erst die Ausgabe danach. Wo genau du die Ausgabe dazwischen packen musst, kann ich aber so wie gesagt nicht beurteilen.

    Die Erwähnung von Pods bezog sich darauf, dass du bei Städte-Portalen unter Umständen Relationen zwischen Inhalten aufbauen möchtest. Sowas wie „Liste mit alle Tankstellen in Deutschland“, aber eben auch „Liste mir zu Berlin alle Bäcker, Kinos, Tankstellen und Tierärzte …“
    Bisher sieht das aber alles einfacher und überschaubarer aus und du kannst vermutlich das, was unter Locations erscheinen soll, auch über Custom Fields erfassen.

    Thread-Starter sabineline

    (@sabineline)

    Unglaublich, ich hab den Code zig mal überflogen, aber diesen Include übersehen.
    Schande über mein Haupt.
    Nun funktioniert es exakt wie gewünscht und ich kann glücklich schlafen gehen!

    Erneut vielen vielen Dank! =)

    Unglaublich, ich hab den Code zig mal überflogen …

    Manchmal hilft auch ein kurzer Spaziergang um den Block. 😉

    Schön, dass es sich so geklärt hat und Danke für die Rückmeldung.

Ansicht von 9 Antworten - 1 bis 9 (von insgesamt 9)
  • Das Thema „Eigenen PHP-Content in Custom Template darstellen“ ist für neue Antworten geschlossen.