Etiqueta condicional para verificar si se está usando 'page.php'

17 jun 2014, 00:40:54
Vistas: 17.5K
Votos: 11

Estoy intentando verificar si se está utilizando la plantilla page.php o no. He probado con is_page_template( 'page.php' ) pero no funciona.

Tampoco puedo usar is_page() porque solo quiero hacer algo cuando se usa page.php, y no cuando se usa alguna otra plantilla personalizada de página.

Por favor, infórmame sobre esto y ¡gracias!

Edición: Debí mencionar antes que tengo un archivo llamado common-options.php que se incluye en casi todas las plantillas (como index.php, page.php, single.php y page_blog.php). En este archivo estoy intentando hacer la verificación con el siguiente código:

if ( is_page_template( 'page.php' ) ) {
    echo "¡Éxito!";
}

Pero no funciona cuando abro una página que usa la "Plantilla por defecto".

4
Comentarios

is_page_template() es la función correcta pero dices que "no funciona". ¿Estás comprobando dentro del loop?

jdm2112 jdm2112
17 jun 2014 01:15:00

Hola, lo estoy comprobando en un archivo que estoy incluyendo (usando 'include()') en la parte superior de page.php y otros archivos. Por favor, mira la edición de mi pregunta.

user1981248 user1981248
17 jun 2014 03:40:49

Desafortunadamente no puedo responder a mi propia pregunta con tu edición. Hay demasiadas posibilidades sin ver más de tu código. Si estás probando la condición dentro del loop, is_page_template no funcionará. Mi recomendación es averiguar qué plantilla se está usando y luego descubrir por qué. Esta función mostrará el archivo de plantilla actual en cada página para un administrador conectado. http://pastebin.com/wkNv9Eug. Coloca esto en tu functions.php y recarga la página. Mientras tu tema llame a wp_head() deberías ver la plantilla en la parte superior de cada página cuando estés conectado.

jdm2112 jdm2112
17 jun 2014 05:58:14

La pregunta más importante aquí es: ¿estás verificando dentro del loop? ¿Estás llamando a the_post en tu archivo de plantilla antes de llamar a is_page_template? (is_page_template( 'page.php' no funcionará de ninguna manera, pero sigue siendo una pregunta importante para responder tu pregunta original)

engelen engelen
17 jun 2014 10:47:06
Todas las respuestas a la pregunta 7
5
12

Yo mismo me encontré con el mismo problema y mi solución fue este código:

if(basename(get_page_template()) === 'page.php'){

}

basename(get_page_template()) obtiene el nombre del archivo de la plantilla de página (según https://codex.wordpress.org/Function_Reference/get_page_template) y luego verificamos si es igual a 'page.php'

20 sept 2016 18:15:06
Comentarios

¿Podrías elaborar más sobre cómo funcionará este código?

Ethan Rævan Ethan Rævan
20 sept 2016 18:29:21

Estoy de acuerdo, esta es una solución sólida pero podría ampliarse. +1

Howdy_McGee Howdy_McGee
20 sept 2016 19:48:26

Al menos para mí, esto retorna true para cualquier página, incluso si uso una plantilla personalizada (diferente a page.php)

Jabel Márquez Jabel Márquez
26 sept 2017 06:20:44

Esto es genial porque funciona incluso si la página está usando su plantilla por defecto.

rinogo rinogo
10 ago 2018 02:10:01

Funciona maravillosamente para mí en functions.php con el hook wp_enqueue. is_page_template( 'page.php' ) no se ejecutó... Me pregunto si alguien encontrará una explicación...

Friedrich Siever Friedrich Siever
28 ago 2018 23:41:11
2

Tienes dos funciones útiles: is_page() y is_page_template().

La función is_page() devolverá true cuando estés en una página, y la función is_page_template() devolverá false si la entrada actual (puede ser una página) no está utilizando una plantilla personalizada.

Por lo tanto, solo necesitas usar ambas funciones juntas:

if ( is_page() && !is_page_template() ) {
  // tu código
}
24 sept 2018 08:53:00
Comentarios

Creo que esta es la respuesta más sólida.

Hannah Smith Hannah Smith
17 nov 2020 18:42:14

Sigue funcionando perfectamente hasta la fecha actual. ¡Gracias!

rwzdoorn rwzdoorn
12 ene 2021 18:12:05
2

Pregunta antigua, pero interesante.

En general, no es común verificar la plantilla en WordPress. La plantilla es el resultado de la consulta principal que se ejecuta y establece el contexto de la solicitud.

Si fuera necesario, probablemente establecería algún tipo de bandera al inicio del page.php, como declarar una constante para ello, para tener mi propio contexto.

Sin embargo, en general esto me hace pensar que cualquier lógica que requiera este tipo de solución debería considerarse para ajustarse a mecanismos y condicionales más comunes.

20 sept 2016 19:01:52
Comentarios

+1 Cualquier código que necesite esta condición probablemente podría colocarse incondicionalmente dentro de page.php

Andy Macaulay-Brook Andy Macaulay-Brook
20 sept 2016 20:16:11

No estoy de acuerdo. En mi caso, estoy intentando encolar un script JS solo en el page.php por defecto, dentro de functions.php. ¿Por qué hacer que el usuario lo cargue en cualquier otra página si no lo necesita? Creo que hay casos de uso para esto.

Jordan Carter Jordan Carter
26 jul 2018 21:55:53
1

En realidad es muy sencillo. Solo usa:

is_page_template()

Si devuelve true, entonces no se está usando page.php y viceversa :)

2 abr 2018 09:07:46
Comentarios

¿No devolvería esto falso en las páginas de entradas?

Jordan Carter Jordan Carter
26 jul 2018 21:57:01
0
$bulkitnt_custom_page_control = is_page_template( 'custom-page.php' );

    // Verifica si no es una plantilla de página personalizada
    if( $bulkitnt_custom_page_control != true ){
        // Ejecuta la acción del encabezado
        do_action('bulkitnt_header_action');
    }
29 jul 2018 13:22:27
2

Esto funciona para mí en el searchbar.php

basename(get_page_template()) === ( 'page.php' )

Este es mi código completo:

if ( is_page_template( 'tpl-ads-home.php' ) || basename(get_page_template()) === ( 'page.php' ) || is_page_template( 'tpl-refine-search.php' ) || is_page_template( 'tpl-categories.php' ) || is_search() || is_404() || is_tax( APP_TAX_CAT ) || is_tax( APP_TAX_TAG ) || is_singular( APP_POST_TYPE ) ) :

    $args = cp_get_dropdown_categories_search_args( 'bar' );
27 jul 2020 18:11:47
Comentarios

Código completo

<?php if ( is_page_template( 'tpl-ads-home.php' ) || basename(get_page_template()) === ( 'page.php' ) || is_page_template( 'tpl-refine-search.php' ) || is_page_template( 'tpl-categories.php' ) || is_search() || is_404() || is_tax( APP_TAX_CAT ) || is_tax( APP_TAX_TAG ) || is_singular( APP_POST_TYPE ) ) :

$args = cp_get_dropdown_categories_search_args( 'bar' ); ?>

Robin Robin
27 jul 2020 18:15:51

Debes agregar tu código a tu respuesta, no como un comentario

mozboz mozboz
27 jul 2020 18:26:58
2
-2

Utiliza un array nulo en lugar de 'page.php' ej: is_page_template(array(''));

1 feb 2019 15:14:22
Comentarios

Por favor, [edita] tu respuesta y añade una explicación: ¿por qué podría eso solucionar el problema?

fuxia fuxia
1 feb 2019 15:48:36

También podrías proporcionar un ejemplo.

RiddleMeThis RiddleMeThis
1 feb 2019 16:06:13