Returnează tipul paginii curente

31 ian. 2013, 08:00:19
Vizualizări: 27.8K
Voturi: 5

Există vreo funcție care returnează pur și simplu "tipul paginii" curente în loc să folosim is_page(), is_preview(), is_single(), is_archive(), etc?

De exemplu: Pot găsi "tipul de postare" curent dar nu pot găsi "tipul de pagină" corespunzător.

0
Toate răspunsurile la întrebare 4
2
16

Ai nevoie de propria funcție helper care să îți returneze ceea ce ai nevoie. Ar putea arăta astfel:

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 ian. 2013 10:33:06
Comentarii

Da, speram ca WordPress să aibă ceva încorporat pentru asta. Din păcate nu! Mulțumesc pentru funcție!

EddyR EddyR
31 ian. 2013 12:04:10

Cumva suntem în 2022 și încă nu există o funcție nativă în WP pentru asta. Răspuns genial.

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

dar chiar și așa, acea pagină poate fi o pagină singulară, arhivă sau orice altceva...

Ce încerci să realizezi? Poate în acest caz va fi mai clar de înțeles ce ai nevoie.

Actualizare. Uită-te la funcția exemplu din temă pe care o poți folosi pentru a realiza această sarcină. Funcția se numește twentyeleven_body_classes din tema Twentyeleven. Ea returnează clase care pot fi folosite pentru filtrul 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;
}

nimic nu te împiedică să adaugi clase suplimentare. is_archive() sau altceva... în acest caz ai tipurile de pagini pe care le dorești.

31 ian. 2013 08:05:45
Comentarii

Ceea ce vreau să știu este dacă pagina este single, archive, attachment, etc. Nu mă interesează tipul de post.

EddyR EddyR
31 ian. 2013 08:10:11

În această privință, ia ca exemplu una dintre funcțiile body_classes. Una dintre cele oferite în codul actualizat.

Oleg Butuzov Oleg Butuzov
31 ian. 2013 08:19:43
0

Dacă plasați acest tag de template în interiorul tag-ului Body <?php body_class(); ?> acesta va fi afișat în codul dumneavoastră, adică <body <?php body_class(); ?>> Acest lucru vă va oferi template-urile referențiate pentru pagina respectivă.

Alternativ, puteți afișa calea către template-ul de pagină care este apelat, cum ar fi page.php sau single-posttype.php, folosind: <?php echo get_page_template() ?>

31 ian. 2013 09:43:51
0

Sunt puțin cam târziu, dar o soluție mai bună și mai compactă folosind array_filter ar fi:

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 ) );
}
27 sept. 2017 17:14:51