Esiste un file template predefinito per le pagine figlie / sottopagine?
Questa sembra una domanda molto semplice. Sto cercando qualcosa come sub-page.php o page-child.php dove posso fare alcune cose diverse nelle pagine figlie del mio tema.
Sono abbastanza diverse nel design e nel contenuto tanto che devo utilizzare molto codice PHP o la classe CSS .page-child per fare tutto il lavoro pesante. Sto cercando un metodo più semplice.
Una precisazione - vorrei che questo accadesse automaticamente così da non dover dire al cliente "assicurati di selezionare sempre il template 'sottopagina' quando crei una sottopagina!" il che è precario..

In realtà è molto semplice, aggiungi il seguente codice al tuo functions.php
add_filter(
'page_template',
function ($template) {
global $post;
if ($post->post_parent) {
// ottieni la pagina genitore di livello superiore
$parent = get_post(
reset(array_reverse(get_post_ancestors($post->ID)))
);
// oppure ...
// quando hai bisogno del post genitore più vicino
// $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;
}
);
Quindi puoi preparare i template con i seguenti pattern:
[parent-page-slug]/page.php
[parent-page-slug]/page-[child-page-slug].php
[parent-page-slug]/page-[child-post-id].php

Questa è una risposta estremamente sottovalutata, è molto più versatile della risposta accettata. +1 da parte mia e un altro +1 per l'uso di una funzione anonima.

Non esiste un template specifico per le pagine figlie, ma puoi crearne uno facilmente utilizzando la funzione get_template_part().
Per prima cosa crea un file chiamato "content-child.php".
Poi crea un file chiamato "content.php".
Successivamente, all'interno di page.php, inserisci questo codice:
if( $post->post_parent !== 0 ) {
get_template_part('content', 'child');
} else {
get_template_part('content');
}
Tutto ciò che vuoi visualizzare su una pagina figlia dovrà essere inserito all'interno di content-child.php. Mentre ciò che vuoi visualizzare sulle pagine non figlie dovrà essere inserito in content.php.

Sono riuscito a far funzionare questo codice. Alla fine, non era necessario separarlo così tanto come pensavo, quindi ho semplicemente modificato il tuo codice e l'ho utilizzato in page.php in un paio di casi specifici. Il selettore CSS 'page-child' ha aiutato a sistemare gli ultimi dettagli. Grazie!

Fantastico! Ottima soluzione. Come posso impostare un template diverso per Parent > Child > Child? Grazie!

La mia modifica alla soluzione di OzzyCzech sopra riportata. Questa funzione cerca nella directory radice del tema i file il cui nome contiene lo slug del genitore o l'ID del genitore.
/radice_tema/child-SLUG_GENITORE.php
/radice_tema/child-ID_GENITORE.php
function child_templates($template) {
global $post;
if ($post->post_parent) {
// ottieni la pagina genitore di livello superiore
$parent = get_post(
reset(array_reverse(get_post_ancestors($post->ID)))
);
// cerca il template figlio basato sullo slug o ID del genitore
$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' );

Ho assegnato un template specifico a una pagina figlia utilizzando Page Templates
Ho questa radice: localhost:8001/my-custom-post-type/page-one/page-one-sub-child
Creare un template page come indicato nella documentazione.
Nel mio caso è in un file page_panoramica.php
ho scritto:
<?php /*
* Template Name: Page Panoramica
* Template Post Type: my-custom-post-type
*/ ?>
Dopo aver assegnato il template alla pagina desiderata
