¿Existe un archivo de plantilla predeterminado para páginas hijas / subpáginas?
Esta parece una pregunta muy simple. Estoy buscando algo como sub-page.php o page-child.php donde pueda hacer algunas cosas diferentes en las páginas hijas de mi tema.
Son lo suficientemente diferentes en diseño y contenido que tengo que usar mucho PHP o la clase CSS .page-child para hacer todo el trabajo pesado. Estoy buscando un método más simple.
Una advertencia - me gustaría que esto sucediera automáticamente para no tener que decirle al cliente "asegúrate de seleccionar siempre la plantilla 'subpágina' cuando crees una subpágina", lo cual es precario...

Es realmente muy fácil, añade el siguiente código a tu archivo functions.php
:
add_filter(
'page_template',
function ($template) {
global $post;
if ($post->post_parent) {
// obtener la página padre de nivel superior
$parent = get_post(
reset(array_reverse(get_post_ancestors($post->ID)))
);
// o ...
// cuando necesitas el post padre más cercano en su lugar
// $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;
}
);
Luego puedes preparar plantillas con los siguientes patrones:
[parent-page-slug]/page.php
[parent-page-slug]/page-[child-page-slug].php
[parent-page-slug]/page-[child-post-id].php

No existe una plantilla específica para páginas hijas, pero puedes hacerlo fácilmente con la función get_template_part().
Primero, crea un archivo llamado "content-child.php".
Segundo, crea un archivo llamado "content.php".
Luego, dentro de page.php, coloca esto:
if( $post->post_parent !== 0 ) {
get_template_part('content', 'child');
} else {
get_template_part('content');
}
Cualquier contenido que desees mostrar en una página hija deberá colocarse dentro de content-child.php. Lo que quieras mostrar en páginas que no sean hijas irá en content.php.

Logré hacer que este código funcione. Resultó que no necesitaba separarlo tanto como pensaba, así que simplemente ajusté tu código y lo usé en page.php en un par de instancias específicas. El selector CSS 'page-child' ayudó a pulir los detalles. ¡Gracias!

¡Genial! Gran solución. ¿Cómo configurar una plantilla diferente para Padre > Hijo > Hijo? ¡Gracias!

Mi modificación de la solución de OzzyCzech mencionada anteriormente. Esta función busca en el directorio raíz del tema archivos cuyo nombre contenga el slug o el ID del elemento padre.
/raiz_del_tema/hijo-SLUG_PADRE.php
/raiz_del_tema/hijo-ID_PADRE.php
function plantillas_hijo($template) {
global $post;
if ($post->post_parent) {
// obtener la página padre de nivel superior
$parent = get_post(
reset(array_reverse(get_post_ancestors($post->ID)))
);
// encontrar la plantilla hijo basada en el slug o ID del padre
$plantilla_hijo = locate_template(
[
'hijo-' . $parent->post_name . '.php',
'hijo-' . $parent->ID . '.php',
'hijo.php',
]
);
if ($plantilla_hijo) return $plantilla_hijo;
}
return $template;
}
add_filter( 'page_template', 'plantillas_hijo' );

He asignado una plantilla específica a una página hija usando Plantillas de Página
Tengo esta ruta: localhost:8001/my-custom-post-type/page-one/page-one-sub-child
Creé una plantilla de página como en la documentación.
En mi caso, está en un archivo page_panoramica.php
donde escribí:
<?php /*
* Template Name: Page Panoramica
* Template Post Type: my-custom-post-type
*/ ?>
Después de asignar la plantilla a la página que necesitas
