Obtener el tipo de página actual

31 ene 2013, 08:00:19
Vistas: 27.8K
Votos: 5

¿Existe alguna función que simplemente devuelva el "tipo de página" actual en lugar de usar is_page(), is_preview(), is_single(), is_archive(), etc?

Por ejemplo: Puedo encontrar el "post type" actual pero no puedo encontrar su correspondiente "tipo de página".

0
Todas las respuestas a la pregunta 4
2
16

Necesitas tu propia función de ayuda que te devuelva lo que necesitas. Podría ser como esta:

function wpse8170_loop() {
    global $wp_query;
    $loop = 'notfound';

    if ( $wp_query->is_page ) {
        $loop = is_front_page() ? 'front' : 'page';
    } elseif ( $wp_query->is_home ) {
        $loop = 'home';
    } elseif ( $wp_query->is_single ) {
        $loop = ( $wp_query->is_attachment ) ? 'attachment' : 'single';
    } elseif ( $wp_query->is_category ) {
        $loop = 'category';
    } elseif ( $wp_query->is_tag ) {
        $loop = 'tag';
    } elseif ( $wp_query->is_tax ) {
        $loop = 'tax';
    } elseif ( $wp_query->is_archive ) {
        if ( $wp_query->is_day ) {
            $loop = 'day';
        } elseif ( $wp_query->is_month ) {
            $loop = 'month';
        } elseif ( $wp_query->is_year ) {
            $loop = 'year';
        } elseif ( $wp_query->is_author ) {
            $loop = 'author';
        } else {
            $loop = 'archive';
        }
    } elseif ( $wp_query->is_search ) {
        $loop = 'search';
    } elseif ( $wp_query->is_404 ) {
        $loop = 'notfound';
    }

    return $loop;
}
31 ene 2013 10:33:06
Comentarios

Sí, esperaba que WP tuviera algo integrado para manejar esto. ¡Desafortunadamente no! ¡Gracias por la función!

EddyR EddyR
31 ene 2013 12:04:10

De alguna manera es 2022 y todavía no hay una función nativa de WP para esto. Respuesta brillante.

Artem Artem
12 mar 2022 17:26:47
2
<?php
var_dump(get_query_var('post_type'));

pero incluso así esa página puede ser un single, archive o cualquier otra cosa...

¿Qué estás intentando lograr? Quizás en ese caso se entienda mejor lo que necesitas.

actualización. Echa un vistazo a la función de ejemplo del tema que puedes usar para lograr esta tarea. La función se llama twentyeleven_body_classes del tema Twentyeleven. Devuelve clases que pueden usarse para el filtro body_classes.

function twentyeleven_body_classes( $classes ) {

    if ( function_exists( 'is_multi_author' ) && ! is_multi_author() )
        $classes[] = 'single-author';

    if ( is_singular() && ! is_home() && ! is_page_template( 'showcase.php' ) && ! is_page_template( 'sidebar-page.php' ) )
        $classes[] = 'singular';

    return $classes;
}

nada te impide agregarle clases adicionales. is_archive() o algo más... en este caso obtendrás los tipos de página que deseas.

31 ene 2013 08:05:45
Comentarios

Lo que quiero saber es si la página es una entrada individual, un archivo, un adjunto, etc. No me importa el tipo de publicación.

EddyR EddyR
31 ene 2013 08:10:11

En este caso, toma como ejemplo una de las funciones body_classes. Una de las proporcionadas en el código actualizado.

Oleg Butuzov Oleg Butuzov
31 ene 2013 08:19:43
0

Si colocas esta etiqueta de plantilla dentro de la etiqueta Body <?php body_class(); ?> se mostrará en tu código como <body <?php body_class(); ?>> Esto te dará las plantillas referenciadas para la página dada.

Alternativamente, podrías mostrar la ruta de la plantilla de página que se está llamando, como page.php o single-posttype.php, usando esto: <?php echo get_page_template() ?>

31 ene 2013 09:43:51
0

Llego un poco tarde, pero una solución mejor y más pequeña usando array_filter sería:

function getPage( $arrayIn ) {
    $prefix = 'is_';

    // Filtrar el array para obtener solo las claves que comiencen con el prefijo
    $array = array_filter( array_filter( (array) $arrayIn, function ( $key ) use ( $prefix ) {
        return ( strpos( $key, $prefix ) === 0 );
    }, ARRAY_FILTER_USE_KEY ) );

    // Eliminar la entrada 'is_singular' del array
    unset( $array['is_singular'] );

    // Eliminar el prefijo de la primera clave del array y devolver el resultado
    return preg_replace( '/^' . preg_quote( $prefix, '/' ) . '/', '', key( $array ) );
}
27 sept 2017 17:14:51