¿Hay alguna manera de cambiar la selección predeterminada de la plantilla de página?
Haz clic en "Páginas" -> Haz clic en "Añadir nueva"
En la pantalla de añadir nueva página, la plantilla de página predeterminada seleccionada es "Plantilla predeterminada". ¿Existe alguna manera de cambiar la opción predeterminada a, digamos "Mi otra plantilla"? De modo que cuando haga clic en "Añadir nueva", "Mi otra plantilla" siempre esté seleccionada por defecto. Esto debe hacerse antes de que la página se guarde. Puedo lograrlo con JS. ¿Existe alguna opción en WordPress?
ACTUALIZACIÓN:
Aquí hay un ejemplo:
Opciones de plantilla:
- Plantilla predeterminada (seleccionada automáticamente)
- Mi plantilla 1
- Mi plantilla 2
¿Existe alguna forma en WordPress para cambiar a:
- Plantilla predeterminada
- Mi plantilla 1 (seleccionada automáticamente)
- Mi plantilla 2
Pensé que tal vez esto podría lograrse con una función:
if (alguna_condicion_se_cumple)
default_template = Mi plantilla 1
endif
Sé cómo funciona la jerarquía de plantillas. Sé cómo hacer que mi plantilla siempre se use para ciertas páginas. Pero esa no es la pregunta. Solo estoy tratando de hacer las cosas más fáciles para el usuario final para que, bajo ciertas condiciones, pueda preseleccionar la plantilla que debería usarse en un grupo de páginas, pero aún así, darle al usuario la flexibilidad de cambiar a otra plantilla si es necesario.

Usar template_include
(como lo sugiere Brad Dalton) solo cambia la plantilla de página en el front end, no en el administrador al editar una página.
Por otro lado, cambiar el valor en el objeto post antes de que se renderice el metabox, como lo sugiere czerspalace, ¡funciona! Agregué una verificación para aplicar esto solo cuando $post->page_template
no está establecido, así:
function wpse196289_default_page_template() {
global $post;
if ( 'page' == $post->post_type
&& 0 != count( get_page_templates( $post ) )
&& get_option( 'page_for_posts' ) != $post->ID // No es la página para listar entradas
&& '' == $post->page_template // Solo cuando page_template no está establecido
) {
$post->page_template = "page-mytemplate.php";
}
}
add_action('add_meta_boxes', 'wpse196289_default_page_template', 1);

El código anterior debería funcionar en el archivo functions.php de tu tema (o en un plugin personalizado). Necesitas cambiar la cadena page-mytemplate.php
por un nombre que coincida con la plantilla de página deseada en tu tema.

Me inspiraste para hacer esto en el nuevo editor de bloques (Gutenberg) usando el hook de filtro "rest_prepare_{$post_type}".

No he probado esto, pero podría funcionar. La plantilla se elige basándose en un valor del objeto post global, por lo que necesitamos cambiar ese valor en el objeto post antes de que se renderice el metabox. El código que elige el dropdown predeterminado está aquí: https://core.trac.wordpress.org/browser/trunk/src/wp-admin/includes/meta-boxes.php#L751
add_action('add_meta_boxes', 'wpse196289_default_page_template', 1);
function wpse196289_default_page_template() {
global $post;
if ( 'page' == $post->post_type && 0 != count( get_page_templates( $post ) ) && get_option( 'page_for_posts' ) != $post->ID ) {
if( $my_conditions )
$post->page_template = "page-mytemplate.php";
}
}

La forma más sencilla que encontré, sin modificar el código, es crear un archivo page.php separado (alejado de tus archivos page_template-name.php) y usar get_template_part() para redirigir a tu archivo de plantilla. Esto proporciona la plantilla predeterminada en todo tu sitio, al mismo tiempo que mantiene la plantilla como una opción discreta.
<?php get_template_part('page_template-name'); ?>
Esto es todo lo que necesita existir en tu archivo page.php. Simplemente obtiene tu plantilla predeterminada. Si deseas cambiar tu plantilla en todo el sitio, entonces podrías simplemente cambiar el slug. Cualquier página que tenga la opción predeterminada seleccionada cambiará. Cualquier página que esté configurada específicamente para usar la plantilla (es decir, configurada como template-1 en lugar de predeterminada), no cambiará.

He logrado conseguir eso en el nuevo editor de bloques (Gutenberg).
La tarea requiere un enlace (hook) a la respuesta de la API REST en este caso.
Tomé las condiciones de la respuesta de Adrian.
foreach ( array( 'page', 'post' ) as $post_type ) :
add_filter( "rest_prepare_{$post_type}", 'wpse196289_rest_set_default_page_template', 1, 2 );
endforeach;
function wpse196289_rest_set_default_page_template( $data, $post ) {
if ( 0 != count( get_page_templates( $post ) ) && get_option( 'page_for_posts' ) != $post->ID && '' == $data->data['template'] ) :
$data->data['template'] = 'page-mytemplate.php';
endif;
return $data;
}

Cuando implementé este código, el editor establecía mi plantilla a la que especifiqué, sin embargo, recibía mensajes diciendo "Actualización fallida" cada vez que intentaba actualizar.

Este código romperá el sitio y necesitarás reinstalarlo nuevamente.

Utiliza template_include
en tu archivo de funciones con una etiqueta condicional.
add_filter( 'template_include', 'default_page_template', 99 );
function default_page_template( $template ) {
if ( is_singular( 'page' ) ) {
$default_template = locate_template( array( 'default-page-template.php' ) );
if ( '' != $default_template ) {
return $default_template ;
}
}
return $template;
}

Es un éxito para mí:
function wpse196289_default_page_template() {
global $post;
if ( 'page' == $post->post_type
&& 0 != count( get_page_templates( $post ) )
&& get_option( 'page_for_posts' ) != $post->ID // No es la página para listar entradas
&& '' == $post->page_template // Solo cuando page_template no está configurado
) {
//print_r(get_page_templates( $post )); obtiene la lista de plantillas
//Array([Elementor Canvas] => elementor_canvas [Elementor Full Width] => elementor_header_footer [Theme] => elementor_theme)
$post->page_template = "elementor_header_footer"; // establece la plantilla que deseas
}
}
add_action('add_meta_boxes', 'wpse196289_default_page_template', 1);
