Există un fișier șablon implicit pentru pagini copil / subpagini?
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..

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

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.

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.

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!

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

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' );

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ă
