web-dev-qa-db-fra.com

Retourne le type de page actuel

Existe-t-il une fonction qui renvoie simplement le "type de page" actuel au lieu d'utiliser is_page (), is_preview (), is_single (), is_archive (), etc.?

Par exemple: je peux trouver le "type de message" actuel, mais je ne trouve pas le "type de page" correspondant.

5
EddyR

Vous avez besoin de votre propre fonction d'assistance qui vous retournera ce dont vous avez besoin. Cela pourrait être comme celui-ci:

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;
}
11
Eugene Manuilov
<?php
var_dump(get_query_var('post_type'));

mais même que cette page peut être un simple ou une archive ou autre chose ...

Qu'est-ce que vous voulez atteindre? Peut-être dans ce cas sera mieux comprendre ce dont vous avez besoin.

mettre à jour. Jetez un coup d'œil à l'exemple de fonction de thème que vous pouvez utiliser pour mener à bien cette tâche. function appelée vingteleven_body_classes à partir de Twentyeleven theme. il retourne des classes utilisables pour le filtre 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;
}

rien ne vous empêche de ne pas ajouter de classes supplémentaires. is_archive () ou quelque chose d'autre ... dans ce cas, vous avez un type de page que vous voulez.

1
Butuzov

Si vous placez cette balise de modèle dans la balise Body <?php body_class(); ?>, elle sera affichée dans votre code, à savoir <body <?php body_class(); ?>>. Elle vous donnera les modèles référencés pour la page donnée.

Vous pouvez également indiquer le chemin d'accès au modèle de page appelé p.ex. page.php ou single-posttype.php en utilisant ceci: <?php echo get_page_template() ?>

0
Alex V.

Je suis un peu trop tard, mais une solution plus petite et meilleure utilisant un filtre de tableau serait:

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

    $array = array_filter( array_filter( (array) $arrayIn, function ( $key ) use ( $prefix ) {
        return ( strpos( $key, $prefix ) === 0 );
    }, ARRAY_FILTER_USE_KEY ) );

    unset( $array['is_singular'] );

    return preg_replace( '/^' . preg_quote( $prefix, '/' ) . '/', '', key( $array ) );
}
0
Rodrigo Brandão