Template für Custom Post Types

  • Hallo an alle :)

    Ich habe eine Frage wegen den Templates für Custom Post Types. Laut der Wordpress Template Hierarchie werden ja die Beiträge der Custom Post Types in der archive-{slug}.php ausgegeben. Wenn die nicht existiert in der archive.php und ansonsten in der index.php.

    Mit den ersten beiden Lösungen war ich nicht glücklich, weil ich es nicht geschafft habe, die aktuelle Seite im Menü hervorzuheben und den Titel der Webseite auszugeben. Ich habe noch nicht ganz verstanden warum das so ist, ich nehme an das Archivseiten irgendwie anders funktionieren. Damit muss ich mich noch genauer befassen.

    Dieses Problem konnte ich aber lösen indem ich ein eigenes Template, also eine page-beispiel.php mit

    /**
    * Template Name: Personen
    */

    angelegt habe. In diesen Templates wird mit WP_Query der Posttype abgefragt, ich habe also für jeden Post Type ein eigenes Template mit einem eigenen Loop. Es ist bei mir so, das pro Seite eine Art von Custom Post Types geladen wird.

    Das funktioniert alles und doch habe ich das Gefühl, diese Sache nicht gut gelöst zu haben. Aus dem Grund das ich jetzt für jede Seite ein eigenes Template habe und Anpassungen immer für jede Seite einzeln machen muss. Meine Frage ist, ob es eine Möglichkeit gibt, beispielsweise in der page.php, oder in der index.php eine Abfrage einzubauen, von welcher Seite ich komme und je nachdem die richtigen Beiträge zu laden.

    Als Beispiel zur Veranschaulichung:

    Custom Post Type: people
    Seite: Personen
    Template: people.php
    WP_Query als Argument: 'post_type' => 'people'

    Custom Post Type: animals
    Seite: Tiere
    Template: animals.php
    WP_Query als Argument: 'post_type' => 'animals'


    Ich hoffe ich konnte das verständlich beschreiben und bin sehr froh, wenn mir jemand sagen kann, wie ich das besser lösen könnte.

    • 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

  • Hallo :)

    Ich komme bei dieser Sache einfach nicht weiter. Vielleicht konnte mir hier niemand helfen, weil ich das Problem nicht klar beschrieben habe, also versuche ich es jetzt nochmal.

    Gibt es eine Möglichkeit verschiedene CustomPostTypes in einem Template auszugeben und je nachdem von welcher Seite ich komme, die richtigen anzuzeigen. Würde ich das ohne Wordpress machen, dann würde ich es in etwa so versuchen:

    if($page === 'person') {
    // WP_Query Argument 'personen'
    } elsif ($page === 'tier') {
    // WP_Query Argument 'tiere'
    }

    Es tut mir wirklich leid, das ich damit jetzt noch einmal nerven muss, ich habe vieles versucht, aber ich glaube mir fehlt hier von Grund auf die Richtung in die ich denken muss, beziehungsweise ich bin nicht einmal mehr sicher, ob es dafür eine Lösung gibt.

  • Würde empfehlen, zurück zur Verwendung von archive-{post_type}.php zu gehen und in der entspr. Datei im Theme einen Titel und ggf. für das Menü die fehlenden Styles in style.css zu ergänzen, das wäre die saubere Lösung.

    Möglicherweise wurde bzgl. des "hervorheben" Problems ja nur die Archivseite des Custom Post Types nicht korrekt ins Menü gezogen? Das wäre z.B. der Eintrag "Alle Tiere" beim Bearbeiten des Menüs links unter "Tiere" im Tab "Zeige alle". Rechts im Menü steht bei dem Eintrag dann ""Inhaltstyp-Archiv" statt "Seite".

    Einmal editiert, zuletzt von b3317133 (23. März 2017 um 15:34)

  • Danke euch beiden für die Tipps.

    Die Conditional Tags gehen ziemlich genau in die Richtung, an die ich gedacht hatte. Allerdings mache ich das Theme nur zu Übungszwecken, darum bin ich sehr an den "best practices" interessiert und werde nochmal versuchen, ob ich mit der Lösung von b3317133 zurecht komme. Ich habe mich dabei eigentlich nur auf den Code konzentriert und nicht daran gedacht das es an einer falschen Einstellung liegen könnte.

    Dennoch muss ich nochmal nachfragen, ich muss auf diese Weise ja wieder eine Datei für jedes Template anlegen. Ist das ok dann? Mir liegt wirklich sehr viel daran, mein Theme ordentlich programmiert zu haben.

    Ich bin so stutzig, weil ich bisher nur PHP kenne und dabei ja das DRY-Prinzip immer beachtet werden muss. Oder muss ich den Gedanken "was in php gewünscht ist, gilt automatisch auch für Wordpress" einfach ablegen?

    Liebe Grüße
    Marie

  • Hallo Marie,
    ich habe ein ähnliches Problem, ich kann mein Custom-Post-Type "tiere" nicht über die Kategorie-Seiten ausgeben lassen (arbeite dran), auf "normalen" Seiten funktioniert es aber.
    Zu Deinem Problem: Ich habe die Funktion
    [COLOR=#0000ff]$pagename[/COLOR] = get_query_var('pagename');
    zur Ausgabe des Pagenamens gefunden, die Dir vielleicht weiterhilft. $pagename gibt Dir den Namen der Seite wieder, die Du im Menue angeklickt hast.
    Ich versuche gerade, die Variable als Kategoriefilter (Ich habe Ketegoreien und Seiten den gleichen Namen gegeben) für die Ausgabe zu verwenden, falls es mit den Kategorieseiten nicht klappt.
    Plugins: CustomPostTypes UI
    Theme: Bouquet

    Gruss

    Herbert

Jetzt mitmachen!

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