the_title() afișează titlul primei postări în loc de titlul paginii?

12 mar. 2013, 21:30:54
Vizualizări: 19.8K
Voturi: 8

Mă confrunt ocazional cu această problemă și nu sunt sigur ce o cauzează, aveți idei?

<?php get_header(); ?>
    <div class="content" role="main">
            <h1><?php the_title(); ?></h1>
            <?php get_template_part( 'loop', 'index' ); ?>
    </div>
<?php get_footer(); ?>

Pentru o pagină normală the_title returnează "Titlul paginii".

Dar pentru un blog (folosind loop.php ca în fișierul index de mai sus) returnează "Titlul primei postări".

Aveți idei?

0
Toate răspunsurile la întrebare 5
0
10

the_title este un tag din Buclă (Loop). Acesta "afișează sau returnează titlul postării curente" și ar trebui utilizat în interiorul Buclei, nu în afara acesteia.

Ceea ce faci tu — apelându-l în afara Buclei — nu este chiar corect și obții rezultate inconsistente. Iată ce se întâmplă:

  1. Variabila $post este setată la prima postare din Bucă chiar la începutul încărcării paginii. Pentru unele pagini, cum ar fi paginile de postări unice care au doar o singură postare în Bucă, aceasta înseamnă că $post este "pagina pe care te afli" — mai mult sau mai puțin. Pentru paginile de arhivă, este prima postare din Bucă. Poți pune var_dump($post); înainte ca wp_head să ruleze și vei vedea că variabila este deja setată.
  2. Tag-uri precum the_title folosesc acea variabilă globală $post. Trebuie să urmărești lanțul prin câteva funcții, dar în final ajungi la funcția get_post și poți vedea în sursă că așa stau lucrurile. În acest caz, lanțul este the_title->get_the_title->get_post

Deci, ceea ce descrii tu este exact ce ar trebui să se întâmple. Folosești tag-ul incorect. Uneori funcționează așa cum vrei doar datorită unui detaliu al codului. Nu este menit să funcționeze în acest fel, cel puțin așa mi se pare.

Dacă vrei "pagina pe care te afli", uneori va trebui să folosești get_queried_object, dar fii atent deoarece returnează diferite tipuri de date în funcție de pagină, iar pentru unele pagini returnează NULL. În alte cazuri, este mai bine să folosești is_home, is_category, etc. condiționale decât să te bazezi pe datele interogării. De fapt, în majoritatea cazurilor este mai bine să folosești acele condiționale sau doar un apel la wp_title cum sugerează toscho, dar contextul în care încerci să folosești acest lucru mă face să mă întreb dacă este corect. În plus, ieșirea lui wp_title poate fi, și frecvent este, manipulată de plugin-uri (de exemplu, plugin-uri SEO), ceea ce poate fi sau nu ceea ce dorești.

12 mar. 2013 22:07:16
2

Pe paginile de arhivă – blog, an, categorie și așa mai departe – folosiți wp_title() pentru a obține titlul paginii. the_title() se bazează pe datele unui singur articol.

12 mar. 2013 22:27:44
Comentarii

Mulțumesc pentru împărtășire. Într-o situație urgentă, asta a rezolvat problema mea.

Pegues Pegues
16 ian. 2019 19:00:42

Mulțumesc, am fost foarte confuz de ce $post pe pagina magazinului woocommerce (care folosește archive-product.php) indica spre primul produs din magazin. Am presupus că $post va indica spre pagina magazinului în sine (deoarece aveam nevoie să preiau câteva câmpuri personalizate de acolo)

finitenessofinfinity finitenessofinfinity
8 dec. 2023 15:35:25
0

Pe paginile de arhivă – blog, an, categorie și așa mai departe – utilizează single_cat_title() pentru a obține titlul paginii. Sper că acest lucru te ajută

24 ian. 2017 10:37:49
0

Tocmai am întâlnit aceeași problemă astăzi, dar am găsit o soluție excelentă:

  <?php 
    if ( is_front_page() ) {
      echo "Acasă";
    } else if (is_single()) { // POST, nu este necesar pentru site-ul meu
      echo "";
    } else if (is_page()) { // PAGINĂ
      echo get_the_title();
    } else if(is_category()) {
      $arr = get_the_category();
      if ( ! empty( $arr ) ) {
        echo esc_html( $arr[0]->name );   
      }
    }
15 iun. 2016 14:18:26
0

Un lucru care te poate ajuta este să mergi la

WordPress Dashboard>Settings>Reading>Posts Page

A funcționat în cazul meu.

17 mai 2020 18:21:46