¿Hay alguna manera de cambiar la selección predeterminada de la plantilla de página?

31 jul 2015, 20:53:14
Vistas: 52.3K
Votos: 8

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.

4
Comentarios

Sé que esto no responde tu pregunta, pero ¿por qué no simplemente cambiar la plantilla? De esa manera, la plantilla predeterminada (page.php o la que sea) sigue siendo precisa y usa el script que deseas.

jdm2112 jdm2112
31 jul 2015 21:03:42

Porque tengo más de una plantilla, y grupos específicos de páginas tienen plantillas específicas. Cambiar la plantilla predeterminada a la plantilla correcta hace las cosas más fáciles para el cliente. Esto no es gran problema en un sitio pequeño, pero marca una gran diferencia en sitios con cientos de páginas.

gdaniel gdaniel
31 jul 2015 21:08:01

La jerarquía de plantillas de WP ofrece varias opciones a considerar. Podrías encontrar tu respuesta allí. https://developer.wordpress.org/themes/basics/template-hierarchy/

jdm2112 jdm2112
31 jul 2015 21:19:30

Sé cómo funciona la jerarquía. Solo quiero saber si hay una opción, aparte de JS, para cambiar la plantilla seleccionada por defecto en la pantalla de edición de página (al agregar una nueva página). Eso es todo. Y como el punto de la pregunta está siendo ignorado, supongo que no hay una.

gdaniel gdaniel
31 jul 2015 21:21:42
Todas las respuestas a la pregunta 6
4

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);
5 jul 2016 15:56:34
Comentarios

Pero, ¿cómo se implementa esto realmente?

JGallardo JGallardo
16 sept 2017 01:20:09

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.

Adrian B Adrian B
18 sept 2017 15:47:46

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

Przemek Maczewski Przemek Maczewski
10 feb 2019 13:36:11

Aunque cambia el valor del texto, tendrás que presionar guardar para que ACF (por ejemplo) se active y muestre los campos apropiados, etc.

Jacob Raccuia Jacob Raccuia
30 ene 2022 20:30:33
0

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";
    }
}
31 jul 2015 22:11:38
0

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á.

8 sept 2017 11:23:05
3

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;
}
10 feb 2019 13:27:37
Comentarios

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.

glass duo glass duo
24 mar 2020 21:51:31

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

Elias Prado Elias Prado
13 dic 2020 05:35:29

No funciona para mí. Es como si la plantilla cambiara pero en la base de datos el valor sigue siendo la plantilla antigua.

raftaar1191 raftaar1191
13 jun 2023 18:13:03
0

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;
}
1 ago 2015 10:18:48
0

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);
23 mar 2023 10:10:57