web-dev-qa-db-ja.com

現在のページタイプを返す

Is_page()、is_preview()、is_single()、is_archive()などを使用する代わりに、現在の「ページタイプ」を単純に返す関数はありますか?

たとえば、現在の「投稿タイプ」は見つかりますが、それに対応する「ページタイプ」は見つかりません。

5
EddyR

あなたはあなたがあなたが必要とするものをあなたに返すでしょうあなた自身のヘルパー機能を必要とします。これは次のようになります。

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'));

しかし、そのページ以外にも、単一のアーカイブや他のものにすることができます。

あなたが達成しようとしているものは何ですか?おそらくその場合はあなたが必要なものをもっと理解するでしょう。

更新。このタスクを達成するために使用できるサンプルテーマ関数を見てください。 Twentyeleven themeからtwentyeleven_body_classesという関数が呼び出されました。 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;
}

追加のクラスを追加しないことを妨げるものは何もありません。 is_archive()か何か他のもの...この場合あなたは欲しいページタイプを手に入れました。

1
Butuzov

このテンプレートタグをBodyタグ<?php body_class(); ?>内に配置すると、コード内に出力されます。つまり、<body <?php body_class(); ?>>は、指定されたページで参照されているテンプレートになります。

別の方法として、これを使用して、page.phpまたはsingle-posttype.phpと呼ばれるページテンプレートへのパスをエコーすることもできます。<?php echo get_page_template() ?>

0
Alex V.

私は少し手遅れですが、配列フィルタを使用したより良いそして小さな解決策は次のようになります。

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