wake-up-neo.net

Gibt es eine Standardvorlagendatei für untergeordnete Seiten/Unterseiten?

Dies scheint eine sehr einfache Frage zu sein. Ich suche nach etwas wie sub-page.php oder page-child.php, wo ich auf den untergeordneten Seiten meines Themas verschiedene Dinge tun kann.

Sie unterscheiden sich in Design und Inhalt genug, dass ich viel PHP oder die CSS-Klasse .page-child verwenden muss, um die ganze Drecksarbeit zu erledigen. Ich suche eine einfachere Methode.

Eine Einschränkung: Ich möchte, dass dies automatisch geschieht, damit ich dem Kunden nicht mitteilen muss, dass beim Erstellen einer Unterseite immer die Vorlage "Unterseite" ausgewählt werden muss. das ist prekär ..

4
timshutes

Es gibt keine spezifische Vorlage für untergeordnete Seiten, aber Sie können dies ziemlich einfach mit der Funktion get_template_part () tun.

Erstellen Sie zuerst eine Datei mit dem Namen "content-child.php".

Zweitens erstellen Sie eine Datei mit dem Namen "content.php".

Als nächstes platziere dies in der page.php:

if( $post->post_parent !== 0 ) {
    get_template_part('content', 'child');
} else {
    get_template_part('content');
}

Alles, was auf einer untergeordneten Seite angezeigt werden soll, wird in content-child.php abgelegt. Alles, was auf nicht untergeordneten Seiten angezeigt werden soll, wird in content.php abgelegt.

13
Pippin

Es ist eigentlich ganz einfach, folge deinem functions.php

add_filter(
    'page_template',
    function ($template) {
        global $post;

        if ($post->post_parent) {

            // get top level parent page
            $parent = get_post(
               reset(array_reverse(get_post_ancestors($post->ID)))
            );

            // or ...
            // when you need closest parent post instead
            // $parent = get_post($post->post_parent);

            $child_template = locate_template(
                [
                    $parent->post_name . '/page-' . $post->post_name . '.php',
                    $parent->post_name . '/page-' . $post->ID . '.php',
                    $parent->post_name . '/page.php',
                ]
            );

            if ($child_template) return $child_template;
        }
        return $template;
    }
);

Dann können Sie Vorlagen mit folgenden Mustern vorbereiten:

  • [parent-page-slug]/page.php
  • [parent-page-slug]/page-[child-page-slug].php
  • [parent-page-slug]/page-[child-post-id].php
9
OzzyCzech

Meine Modifikation der obigen Lösung von OzzyCzech. Diese Funktion sucht im Stammverzeichnis des Themas nach Dateien, deren Name den Slug des übergeordneten Elements oder die ID des übergeordneten Elements enthält.

  • /theme_root/child-PARENT_SLUG.php
  • /theme_root/child-PARENT_ID.php
function child_templates($template) {
    global $post;

    if ($post->post_parent) {
        // get top level parent page
        $parent = get_post(
            reset(array_reverse(get_post_ancestors($post->ID)))
        );

        // find the child template based on parent's slug or ID
        $child_template = locate_template(
            [
                'child-' . $parent->post_name . '.php',
                'child-' . $parent->ID . '.php',
                'child.php',
            ]
        );

        if ($child_template) return $child_template;
    }

    return $template;
}
add_filter( 'page_template', 'child_templates' );
0
comtyler