the_title() mostra il titolo del primo articolo invece del titolo della pagina?

12 mar 2013, 21:30:54
Visualizzazioni: 19.8K
Voti: 8

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?

0
Tutte le risposte alla domanda 5
0
10

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:

  1. La variabile $post viene 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 inserire var_dump($post); prima che wp_head venga eseguito e vedere che la variabile è già impostata.
  2. Tag come the_title utilizzano quella variabile globale $post. Devi tracciarlo attraverso un paio di funzioni per arrivarci, ma alla fine arrivi alla funzione get_post e 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.

12 mar 2013 22:07:16
2

Nelle pagine di archivio – blog, anno, categoria e così via – utilizza wp_title() per ottenere il titolo della pagina. the_title() si basa sui dati di un singolo articolo.

12 mar 2013 22:27:44
Commenti

Grazie per aver condiviso questo. In un momento di difficoltà, ha risolto il mio problema.

Pegues Pegues
16 gen 2019 19:00:42

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 finitenessofinfinity
8 dic 2023 15:35:25
0

Nelle pagine di archivio – blog, anno, categoria e così via – utilizza single_cat_title() per ottenere il titolo della pagina. Spero che questo ti sia utile

24 gen 2017 10:37:49
0

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 );   
      }
    }
15 giu 2016 14:18:26
0

Una cosa che può esserti d'aiuto è andare in

Dashboard WordPress>Impostazioni>Lettura>Pagina articoli

Nel mio caso ha funzionato.

17 mag 2020 18:21:46