the_title() mostra il titolo del primo articolo invece del titolo della pagina?
Mi capita occasionalmente questo problema e non sono sicuro di cosa lo causi, qualche idea?
<?php get_header(); ?>
<div class="content" role="main">
<h1><?php the_title(); ?></h1>
<?php get_template_part( 'loop', 'index' ); ?>
</div>
<?php get_footer(); ?>
Per una pagina normale the_title restituisce "Titolo della pagina".
Ma per un blog (usando loop.php come nel file index qui sopra) restituisce "Titolo del primo articolo".
Qualche idea?
the_title è un tag del Loop. "Mostra o restituisce il titolo del post corrente" e dovrebbe essere utilizzato all'interno del Loop, non al di fuori di esso.
Quello che stai facendo – chiamarlo al di fuori del Loop – non è del tutto corretto e stai ottenendo risultati inconsistenti. Ecco cosa succede:
- La variabile
$postviene impostata sul primo post del Loop molto presto durante il caricamento della pagina. Per alcune pagine, come le pagine di singoli post che hanno solo un post nel Loop, questo significa che$postè "la pagina su cui ti trovi" – più o meno. Per le pagine di archivio, è il primo post nel Loop. Puoi inserirevar_dump($post);prima chewp_headvenga eseguito e vedere che la variabile è già impostata. - Tag come
the_titleutilizzano quella variabile globale$post. Devi tracciarlo attraverso un paio di funzioni per arrivarci, ma alla fine arrivi alla funzioneget_poste puoi vedere nel sorgente che è così. In questo caso, la catena èthe_title->get_the_title->get_post
Quindi, quello che stai descrivendo è esattamente ciò che dovrebbe succedere. Stai utilizzando il tag in modo errato. A volte funziona come desideri solo a causa di una peculiarità del codice. Non è davvero pensato per funzionare in quel modo, almeno così mi sembra.
Se vuoi ottenere "la pagina su cui ti trovi", a volte dovrai usare get_queried_object, ma fai attenzione perché restituisce tipi di dati diversi a seconda della pagina e, per alcune pagine, restituisce NULL. In altri casi, è meglio usare i condizionali come is_home, is_category, ecc. piuttosto che affidarsi ai dati della query in quel modo. In effetti, nella maggior parte dei casi è meglio usare quei condizionali o semplicemente una chiamata a wp_title come suggerisce toscho, ma il contesto in cui stai cercando di utilizzarlo mi fa dubitare che sia corretto. Inoltre, l'output di wp_title può essere, e spesso viene, manipolato da plugin (come i plugin SEO), il che potrebbe o meno essere ciò che desideri.
Grazie per aver condiviso questo. In un momento di difficoltà, ha risolto il mio problema.
Pegues
Grazie, ero veramente confuso sul perché $post nella pagina del negozio woocommerce (che usa archive-product.php) puntasse al primo elemento del negozio. Pensavo che $post avrebbe dovuto puntare alla pagina del negozio stessa (dato che avevo bisogno di recuperare alcuni campi personalizzati da essa)
finitenessofinfinity
Mi è appena capitata la stessa cosa oggi, ma ho trovato un'ottima soluzione:
<?php
if ( is_front_page() ) {
echo "Home";
} else if (is_single()) { // POST, non necessario per il mio sito
echo "";
} else if (is_page()) { // PAGINA
echo get_the_title();
} else if(is_category()) {
$arr = get_the_category();
if ( ! empty( $arr ) ) {
echo esc_html( $arr[0]->name );
}
}