Există un fișier șablon implicit pentru pagini copil / subpagini?

15 iun. 2012, 05:47:55
Vizualizări: 25K
Voturi: 6

Aceasta pare o întrebare foarte simplă. Caut ceva de genul sub-page.php sau page-child.php unde pot face lucruri diferite pentru paginile copil ale temei mele.

Acestea sunt suficient de diferite în design și conținut încât sunt nevoit să folosesc mult cod PHP sau clasa CSS .page-child pentru a face toată munca. Caut o metodă mai simplă.

O mențiune importantă - aș dori ca acest lucru să se întâmple automat, astfel încât să nu trebuiască să spun clientului "asigură-te că selectezi întotdeauna șablonul 'subpage' când creezi o subpagină!", ceea ce este riscant..

0
Toate răspunsurile la întrebare 4
2
16

Este de fapt foarte ușor, adaugă următorul cod în fișierul tău functions.php:

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

        if ($post->post_parent) {

            // obține pagina părinte de nivel superior
            $parent = get_post(
               reset(array_reverse(get_post_ancestors($post->ID)))
            );

            // sau ...
            // când ai nevoie de pagina părinte cea mai apropiată
            // $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;
    }
);

Apoi poți pregăti șabloane cu următoarele modele:

  • [parent-page-slug]/page.php
  • [parent-page-slug]/page-[child-page-slug].php
  • [parent-page-slug]/page-[child-post-id].php
25 feb. 2016 11:05:55
Comentarii

Acesta este un răspuns extrem de subapreciat, este mult mai versatil decât răspunsul acceptat. +1 de la mine și încă un +1 pentru folosirea unei funcții anonime.

gbinflames gbinflames
7 nov. 2018 01:07:55

Ar funcționa acest lucru cu relații de tip părinte > copil > copil al copilului și, dacă da, cum? Mulțumesc!

Drewdavid Drewdavid
24 nov. 2019 05:01:30
3
15

Nu există un șablon specific pentru paginile copil, dar poți realiza acest lucru destul de ușor folosind funcția get_template_part().

Mai întâi creează un fișier numit "content-child.php".

Apoi creează un fișier numit "content.php".

În continuare, în interiorul fișierului page.php, adaugă următorul cod:

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

Orice dorești să fie afișat pe o pagină copil va fi plasat în interiorul fișierului content-child.php. Orice dorești să fie afișat pe paginile care nu sunt copil va fi plasat în content.php.

15 iun. 2012 06:42:18
Comentarii

Am reușit să fac acest cod să funcționeze. După cum s-a dovedit, nu era nevoie să-l separ atât de mult pe cât credeam, așa că doar am ajustat codul tău și l-am folosit în page.php în câteva cazuri specifice. Selectorul CSS 'page-child' a ajutat la rotunjirea marginilor. Mulțumesc!

timshutes timshutes
15 iun. 2012 08:29:32

Super! Soluție excelentă. Cum se poate seta un șablon diferit pentru Părinte > Copil > Copil? Mulțumesc!

Brightweb Brightweb
26 iul. 2012 00:23:16

Aceeași întrebare ca Brightweb...

Drewdavid Drewdavid
24 nov. 2019 05:00:11
1

Modificarea mea la soluția lui OzzyCzech de mai sus. Această funcție caută în directorul rădăcină al temei fișiere al căror nume conține slug-ul sau ID-ul părintelui.

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

    if ($post->post_parent) {
        // obține pagina părinte de nivel superior
        $parent = get_post(
            reset(array_reverse(get_post_ancestors($post->ID)))
        );

        // găsește șablonul copil bazat pe slug-ul sau ID-ul părintelui
        $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' );
7 mar. 2019 18:44:06
Comentarii

Bună - Ar funcționa acest lucru cu relații de tip părinte > copil > copil al copilului și, dacă da, cum? Mulțumesc!

Drewdavid Drewdavid
24 nov. 2019 05:01:47
0

Am atribuit un șablon specific unei pagini copil folosind Șabloane de Pagini

Am această rădăcină: localhost:8001/my-custom-post-type/page-one/page-one-sub-child

Am creat un șablon de pagină conform documentației.

În cazul meu, în fișierul page_panoramica.php am scris:

<?php /* 
  * Template Name: Page Panoramica
  * Template Post Type: my-custom-post-type
*/ ?>

După atribuirea șablonului la pagina dorită

Atribuire șablon pagină WordPress

29 mar. 2023 12:17:52