Mostrar el título de la página en index.php
Tengo mi página de entradas configurada como index.php
, y allí tengo mi encabezado principal (como en todas las páginas).
Estoy teniendo problemas para mostrar el encabezado de la página. La página se llama 'Blog' en WordPress y ha sido especificada como la página de entradas.
Si muestro el encabezado de la página con wp_title('');
, obtengo el título de la página — 'Blog' — pero con el nombre del sitio después (posiblemente debido al plugin Yoast SEO).
Si uso the_title()
, me muestra el título de la entrada más reciente del blog, incluso cuando llamo a la función fuera del loop.
Así que he tenido que recurrir a codificar manualmente <h1>Blog</h1>
, lo cual está lejos de ser ideal.
¿Hay alguna manera de obtener el nombre del título de la página dinámicamente pero solo el título de la página por sí mismo?
Extraño. Fuera del bucle, the_title() debería darte el nombre de la página actual, si realmente estás en una página y no viendo una entrada específica. Si te da el título de la entrada en su lugar, puede significar que de alguna manera estás dentro de un bucle. Pero si eso fuera cierto, wp_title no debería mostrar "Blog".
Prueba si otras opciones dan el mismo resultado:
//the_title();
single_post_title();
echo $post->post_name; // Creo que esto muestra el nombre de la página en la URL
También verifica con is_page(). Podrías probar el test is_page('Blog').
if (is_page('blog')) {
echo 'Blog';
}
else {
the_title();
}
solo para ver qué sucede.

disculpa por la respuesta extremadamente tardía, single_post_title();
parece funcionar, ¡usaré eso! ;)

Es correcto que the_title()
en la página del blog devolverá el título de la publicación más reciente y, por lo tanto, no se puede utilizar.
Cuando una página se establece como "página de entradas" desde los ajustes de lectura, WP llama al archivo de plantilla home.php
(o index.php
si home.php
no existe) en lugar de page.php
(ver: Jerarquía de Plantillas).
Por lo tanto, el condicional is_page()
no funcionará en la página del blog porque ya no es una página.
La única manera de mostrar el título real de la página es usar single_post_title();
single_post_title()
es parte del archivo general-template.php que indica claramente:
Si estamos en la página del blog y esa página no es la página de inicio o una página única designada como la página de inicio, usa el título de la página contenedora.
Puedes revisar el código y los comentarios aquí https://core.trac.wordpress.org/browser/tags/4.4/src/wp-includes/general-template.php#L871

Primero, debes verificar si es una página de blog. Luego, si es verdadero, usa la función single_post_title()
.
( ( !is_front_page() && is_home() ) ? single_post_title() : the_title() );
Aquí se considera que la página del blog no es la página de inicio.
is_page()
no funcionará ya que la página del blog ya no es una página en WordPress.

Sé que ha pasado tiempo desde la publicación original, pero espero que esto ayude a otros que llegaron aquí buscando lo mismo.
single_post_title() funciona para páginas hasta que llegas a las páginas de blog y categorías (y presumiblemente páginas de productos y etiquetas en WooCommerce).
Así que primero simplemente verifica si es una página, de lo contrario usa la función wp_title
if (is_page()) {
single_post_title();
} else {
echo rtrim(wp_title('', false), '- ');
}
Tuve que eliminar el título del sitio de mis configuraciones, pero de todos modos lo estaba agregando manualmente a ambos lados de esta función.

Hay dos formas de obtener el título de una entrada/página en WordPress.
get_the_title();
y the_title();
Cómo usar get_the_title();
<h1 class="entry-header text-primary fst-italic"><?php echo esc_html( get_the_title() ); ?></h1>
Cómo usar the_title();
the_title('<h1 class="entry-title text-primary fst-italic">', '</h1>');
¿Cuál es la diferencia entre get_the_title();
y the_title();
?
the_title();
muestra (echo) su valor directamente, mientras que get_the_title();
no lo muestra (solo retorna el valor).
Este es el estándar para las funciones de WordPress: las funciones que comienzan con the_
mostrarán lo que la función correspondiente que comienza con get_
retorna. Otras funciones tienen un parámetro para elegir si mostrar o no, y otras solo retornan valores.
