Restituire il tipo di pagina corrente

31 gen 2013, 08:00:19
Visualizzazioni: 27.8K
Voti: 5

Esiste una funzione che restituisce semplicemente il "tipo di pagina" corrente invece di utilizzare is_page(), is_preview(), is_single(), is_archive(), ecc?

Ad esempio: posso trovare il "post type" corrente ma non riesco a trovare il corrispondente "tipo di pagina".

0
Tutte le risposte alla domanda 4
2
16

Ti serve una tua funzione helper che ti restituisca ciò di cui hai bisogno. Potrebbe essere qualcosa come questa:

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 gen 2013 10:33:06
Commenti

Sì, speravo che WP avesse qualcosa di integrato per gestire questo. Purtroppo no! Grazie per la funzione!

EddyR EddyR
31 gen 2013 12:04:10

In qualche modo è il 2022 e ancora non c'è una funzione nativa di WP per questo. Risposta brillante.

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

ma anche quella pagina può essere un singolo, un archivio o qualsiasi altra cosa...

Cosa stai cercando di ottenere? Forse in quel caso sarà più chiaro ciò di cui hai bisogno.

aggiornamento. dai un'occhiata alla funzione di esempio del tema che puoi usare per raggiungere questo obiettivo. La funzione si chiama twentyeleven_body_classes dal tema Twentyeleven. Restituisce classi che possono essere usate per il 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;
}

nulla ti impedisce di aggiungere altre classi. is_archive() o qualcos'altro... in questo caso ottieni i tipi di pagina che desideri.

31 gen 2013 08:05:45
Commenti

Quello che voglio sapere è se la pagina è singola, archivio, allegato, ecc. Non mi interessa il tipo di post.

EddyR EddyR
31 gen 2013 08:10:11

In questo esempio prendiamo una delle funzioni body_classes. Una di quelle fornite nel codice aggiornato.

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

Se inserisci questo tag template all'interno del tag Body <?php body_class(); ?> lo visualizzerà nel tuo codice, ad esempio <body <?php body_class(); ?>> Questo ti fornirà i template di riferimento per la pagina specifica.

In alternativa, potresti visualizzare il percorso del template della pagina richiamato, ad esempio page.php o single-posttype.php, utilizzando questo codice: <?php echo get_page_template() ?>

31 gen 2013 09:43:51
0

Arrivo un po' in ritardo ma una soluzione migliore e più compatta utilizzando array_filter sarebbe:

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

    // Filtra l'array mantenendo solo le chiavi che iniziano con il prefisso
    $array = array_filter( array_filter( (array) $arrayIn, function ( $key ) use ( $prefix ) {
        return ( strpos( $key, $prefix ) === 0 );
    }, ARRAY_FILTER_USE_KEY ) );

    // Rimuove la chiave 'is_singular' dall'array
    unset( $array['is_singular'] );

    // Restituisce il nome della pagina senza il prefisso
    return preg_replace( '/^' . preg_quote( $prefix, '/' ) . '/', '', key( $array ) );
}
27 set 2017 17:14:51