Significato dello snippet "if ( is_home() && ! is_front_page() )"?

23 apr 2016, 15:12:39
Visualizzazioni: 219K
Voti: 39

Vedo spesso il seguente codice nei file index.php. Capisco che is_front_page() restituisce true quando si visualizza la Pagina Iniziale del Sito (sia che mostri l'indice dei post del blog o una pagina statica), mentre is_home() restituisce true quando si visualizza l'Indice dei Post del Blog (sia che venga visualizzato nella pagina iniziale o in una pagina statica). Sono ancora un po' confuso sull'utilizzo del seguente codice -

<?php if ( have_posts() ) : ?>

    <?php if ( is_home() && ! is_front_page() ) : ?>
        <header>
            <h1 class="page-title screen-reader-text"><?php single_post_title(); ?></h1>
        </header>
    <?php endif; ?>

Qualsiasi spiegazione sul perché questo pezzo di codice sia così popolare è molto apprezzata.

1
Tutte le risposte alla domanda 3
1
56

Ecco come farlo correttamente:

if ( is_front_page() && is_home() ) {
// Homepage predefinita

} elseif ( is_front_page()){
// Homepage statica

} elseif ( is_home()){

// Pagina blog

} else {

// Tutto il resto

}

Questo è l'unico modo (corretto) per visualizzare o modificare il contenuto con la tua homepage e la tua pagina blog.

19 set 2016 22:19:26
Commenti

Quindi è così che si impostano stili diversi per le pagine in WordPress? Ad esempio, la mia homepage potrebbe avere una grande immagine hero, mentre le pagine Chi Siamo e Contatti potrebbero non averne affatto. È questo il modo in cui si procede per realizzare layout diversi per pagine diverse?

user3660857 user3660857
23 feb 2022 04:45:13
2
21

Questo mostrerà il titolo della pagina quando è impostata una pagina statica per visualizzare gli articoli.

Esempio:

Se mostro gli articoli nella mia homepage... Non farà nulla.

Se invece, ad esempio, mostro gli articoli su una pagina dal titolo Notizie... Mostrerà Notizie in un tag H1.

Questo viene utilizzato affinché il titolo della pagina venga mostrato ogni volta che gli articoli sono visualizzati su una pagina, ma non mostri nulla quando gli articoli del blog sono visualizzati sulla pagina principale (home page).

Lo facciamo perché se è sulla homepage... mostrerà il titolo del primo articolo, facendolo apparire due volte (una in alto nel tag H1 e di nuovo quando gli articoli vengono ciclati).

23 apr 2016 16:03:58
Commenti

Grazie Shramee. Ho trovato il titolo della mia pagina indice del blog in un <h1> mentre cercavo di capirlo, ma in realtà non appare da nessuna parte. Penso che alcuni sviluppatori di temi lo utilizzino solo per aiutare le persone che usano screen-reader, e poi nascondono il testo effettivo, il che è un po' confuso per i principianti se non è commentato/documentato.

olliew olliew
23 apr 2016 16:53:01

Beh... Aiuta a sapere in quale contesto vengono utilizzati i post (come nell'esempio sopra per le Notizie), ma è principalmente lì per il SEO, H1 gioca un ruolo importante nell'aiutare i bot di ricerca a comprendere meglio il contenuto della pagina.

shramee shramee
24 apr 2016 09:16:20
1

Non sono sicuro riguardo a "popolare", non mi sembra così tanto (ma poi non guardo così tanti temi).

Sembri capire bene cosa fa ogni condizionale, quindi questo non dovrebbe confonderti. Questo combina le condizioni per verificare che venga visualizzato l'indice del blog e che non sia la pagina frontale.

Ah, il motivo per single_post_title() immagino sia che mostra il titolo per $wp_query->queried object (impostato dalla query principale come contesto corrente), piuttosto che la variabile globale $post (impostata iterando il loop).

In alcune circostanze questi saranno uguali, ma non in casi come quello che la condizione verifica. Il loop conterrà post, ma l'oggetto interrogato sarà una pagina (a meno che non stia facendo confusione :).

23 apr 2016 15:32:43
Commenti

Recentemente ho esaminato molti template ed è molto comune. Hai ragione sul fatto che capisco cosa fa il loop, ma non capisco perché le persone scelgano di farlo in questo modo particolare. Perché usare single_post_title invece di the_title()?

olliew olliew
23 apr 2016 16:28:35