Există o modalitate de a suprascrie tag-ul <title> specificat în header.php?
În primul rând, aceasta nu este o întrebare despre SEO și nici despre schimbarea tag-ului title pentru întregul site. Dacă cauți pe Google, vei găsi doar răspunsuri la aceste întrebări.
Deci avem propriul nostru theme și avem control total asupra fișierului header.php. Știm cum să setăm titlul. În prezent arată astfel:
<head>
<title><?php wp_title(' | ', true, 'right'); bloginfo('name'); ?></title>
etc...
Nu, problema este alta. Pentru majoritatea paginilor dorim ca titlul să apară așa cum este mai sus. Am realizat însă că pentru un anumit custom post type (și șablonul asociat) titlul CPT-ului nu ar trebui să apară public. Este doar pentru uz administrativ. Ciudat, dar așa este. Nu îl afișăm nicăieri în H1, conținut etc.
Dar apare în titlu.
În mod ideal, am dori o modalitate de a suprascrie titlul din header.php direct din șablon, pentru a specifica un titlu alternativ doar pentru această categorie de pagini. Este posibil acest lucru?

Mai întâi, să modificăm <title>
-ul tău în:
<title><?php wp_title(' | ', true, 'right'); ?></title>
Deoarece adăugarea directă în șirul titlului nu este o soluție viabilă pe termen lung, este mai bine să folosim un filtru pentru a face modificări la titlu. Așadar, să adăugăm (în functions.php):
add_filter('wp_title', 'my_custom_title');
function my_custom_title( $title )
{
// Returnează titlul personalizat
return sprintf("%s %s", $title, get_bloginfo('name'));
}
Apoi, să extindem acest filtru util pentru titlu pentru a face ceea ce dorești:
add_filter('wp_title', 'my_custom_title');
function my_custom_title( $title )
{
if( is_singular("your_post_type"))
{
return ""; // Returnează gol
}
// Returnează titlul personalizat
return sprintf("%s %s", $title, get_bloginfo('name'));
}

Am postat acest răspuns pentru o altă întrebare, dar din moment ce este relevant și mai actualizat, am considerat că ar putea fi util pentru unele persoane.
Modul în care este generat titlul documentului s-a schimbat începând cu WordPress v4.4.0. Acum funcția wp_get_document_title
dictează cum este generat titlul:
/**
* Afișează tag-ul title cu conținut.
*
* @ignore
* @since 4.1.0
* @since 4.4.0 Îmbunătățirea afișării titlului a înlocuit `wp_title()`.
* @access private
*/
function _wp_render_title_tag() {
if ( ! current_theme_supports( 'title-tag' ) ) {
return;
}
echo '<title>' . wp_get_document_title() . '</title>' . "\n";
}
Iată codul din v5.4.2. Acestea sunt filtrele pe care le puteți utiliza pentru a manipula tag-ul title:
function wp_get_document_title() {
/**
* Filtrează titlul documentului înainte de a fi generat.
*
* Transmiterea unei valori non-goale va scurcircuita wp_get_document_title(),
* returnând acea valoare în loc.
*
* @since 4.4.0
*
* @param string $title Titlul documentului. Valoare implicită string gol.
*/
$title = apply_filters( 'pre_get_document_title', '' );
if ( ! empty( $title ) ) {
return $title;
}
// --- tăiat ---
/**
* Filtrează separatorul pentru titlul documentului.
*
* @since 4.4.0
*
* @param string $sep Separator pentru titlu. Implicit '-'.
*/
$sep = apply_filters( 'document_title_separator', '-' );
/**
* Filtrează părțile componente ale titlului documentului.
*
* @since 4.4.0
*
* @param array $title {
* Părțile titlului documentului.
*
* @type string $title Titlul paginii vizualizate.
* @type string $page Opțional. Numărul paginii dacă este paginată.
* @type string $tagline Opțional. Descrierea site-ului când este pe pagina principală.
* @type string $site Opțional. Titlul site-ului când nu este pe pagina principală.
* }
*/
$title = apply_filters( 'document_title_parts', $title );
// --- tăiat ---
return $title;
}
Deci, iată două modalități în care puteți face acest lucru.
Prima utilizează filtrul pre_get_document_title
care scurcircuitează generarea titlului și, prin urmare, este mai performant dacă nu intenționați să faceți modificări la titlul curent:
function custom_document_title( $title ) {
return 'Acesta este noul titlu';
}
add_filter( 'pre_get_document_title', 'custom_document_title', 10 );
A doua metodă utilizează hook-urile document_title_separator
și document_title_parts
pentru titlu și separatorul de titlu care sunt executate mai târziu în funcție, după ce titlul a fost generat utilizând funcții precum single_term_title
sau post_type_archive_title
în funcție de pagină și este pe cale să fie afișat:
// Funcția personalizată trebuie să returneze un string
function custom_seperator( $sep ) {
return '>';
}
add_filter( 'document_title_separator', 'custom_seperator', 10 );
// Funcția personalizată trebuie să returneze un array
function custom_html_title( $title ) {
return array(
'title' => 'Titlu Personalizat',
'site' => 'Site Personalizat'
);
}
add_filter( 'document_title_parts', 'custom_html_title', 10 );

Combinând diferite răspunsuri, acesta este lucrul care a funcționat pentru mine pe WordPress v5.7.2
și tipul meu personalizat de post company
. Am reușit să suprascriu ușor titlul pe pagina de post personalizată pentru a adăuga Numele Site-ului meu la sfârșit
function custom_document_title( $title ) {
// Verifică dacă este o pagină singulară de tipul "company"
if( is_singular("company"))
{
// Returnează titlul formatat: "Titlu - Nume Site"
return sprintf("%s - %s", $title, get_bloginfo('name'));
}
return $title; // Returnează titlul implicit în alte cazuri
}
// Adaugă filtrul pentru a modifica titlul documentului
add_filter( 'pre_get_document_title', 'custom_document_title', 99 );

Versiunea anterioară nu a funcționat pentru mine în WordPress 6.1.1 deoarece returna un $title gol. Această versiune returnează titlul paginii + numele blogului sau orice text personalizat doriți.
function custom_document_title( $title ) {
global $post;
$title = get_the_title($post);
if( is_singular("event")){
return sprintf("%s - %s", $title, 'Înregistrare Eveniment');
} else {
// Returnează titlul standard WordPress
return sprintf("%s - %s", $title, get_bloginfo('name'));
}
}
add_filter( 'pre_get_document_title', 'custom_document_title', 99 );
