Cum să schimbi separatorul în titlu
Schimbă separatorul din titlu.
Lucrez cu tema de bază underscores. Vreau să fac o mică modificare la titlu, schimbând separatorul de la "Titlu articol | nume site" la "Titlu articol - nume site".
Cea mai simplă metodă era să pun:
<title><?php wp_title('-', true, 'right' ); ?><?php bloginfo( 'name' ); ?></title>
în header.php. Dar acum am citit că odată cu introducerea add_theme_support( 'title-tag' );
, nu ar trebui să folosim manual tagul <title>
în header.
Există o metodă simplă de a schimba separatorul în titlu?
De ce această întrebare este diferită de altele similare:
Aici vorbim despre cea mai bună practică după introducerea add_theme_support( 'title-tag' );
și cum să o modificăm, deoarece nu mai este recomandat să folosim manual tagul <title>
în header.
[ Sper sincer că nu va trebui să scriu 8 linii de cod pentru o astfel de mică modificare.
Dacă decid în final să folosesc tagul <title>
ca soluție mai directă, ar trebui să comentez/elimin add_theme_support( 'title-tag' );
din functions.php? ]

ACTUALIZARE pentru WordPress 4.4
Începând cu WordPress 4.4, filtrul wp_title
nu mai funcționează deoarece funcția wp_title()
nu mai este utilizată în nucleu. Această funcție a fost marcată ca depreciată, apoi reinstituită până la o nouă notificare, dar autorii de teme sunt descurajați să o folosească. Din această cauză, filtrul wp_title
va continua să funcționeze dacă utilizați direct funcția wp_title()
în tema dumneavoastră, dar acest lucru nu este recomandat.
Există filtre noi pentru personalizarea titlului documentului atunci când suportul pentru title-tag
este activat în temă:
Dacă doriți doar să personalizați separatorul, puteți utiliza document_title_separator
în felul următor:
add_filter( 'document_title_separator', 'cyb_document_title_separator' );
function cyb_document_title_separator( $sep ) {
$sep = "-";
return $sep;
}
Răspuns anterior
Puteți utiliza filtrul wp_title
pentru a personaliza tag-ul <title>
.
add_filter( 'wp_title', 'customize_title_tag', 10, 3 );
function customize_title_tag( $title, $sep, $seplocation ) {
// Personalizați $title aici.
// Exemplu preluat de pe https://generatepress.com/forums/topic/title-tag-separator/
$title = str_replace( '|', '-', $title );
return $title;
}
Un exemplu mai complex de utilizare a acestui filtru (preluat din tema TwentyTwelve):
function twentytwelve_wp_title( $title, $sep ) {
global $paged, $page;
if ( is_feed() )
return $title;
// Adăugați numele site-ului.
$title .= get_bloginfo( 'name' );
// Adăugați descrierea site-ului pentru pagina principală/front.
$site_description = get_bloginfo( 'description', 'display' );
if ( $site_description && ( is_home() || is_front_page() ) )
$title = "$title $sep $site_description";
// Adăugați un număr de pagină dacă este necesar.
if ( $paged >= 2 || $page >= 2 )
$title = "$title $sep " . sprintf( __( 'Pagina %s', 'twentytwelve' ), max( $paged, $page ) );
return $title;
}
add_filter( 'wp_title', 'twentytwelve_wp_title', 10, 2 );

Mulțumesc. Am verificat asta. Problema este că TwentyTwelve nu folosește add_theme_support( 'title-tag' );
care, apropo, acum este necesară ca și cea mai bună practică. Folosește propria funcție și <title></title?>
în header.php (ceea ce nu mai este permis). Și cred că această funcție specifică nu schimbă separatorul.

Era doar un exemplu despre cum poți folosi filtrul wp_title
pentru a personaliza afișarea etichetei de titlu, nu contează dacă tema suportă title-tag sau folosește funcția wp_title()
, filtrul funcționează pentru ambele.

wp_title()
nu este învechită, a fost reinstituită până la noi informații. Da, nu este recomandat să o mai folosești, dar nu este învechită

Ah, da, a fost reinstituită, nu știam. Dar, oricum, filtrul wp_title
nu funcționează dacă nu folosești direct funcția wp_title()
.

Modul în care este generat titlul documentului s-a schimbat începând cu WordPress v4.4.0. Acum wp_get_document_title
dictează cum este generat titlul:
/**
* Afișează tag-ul de titlu cu conținut.
*
* @ignore
* @since 4.1.0
* @since 4.4.0 Îmbunătățire a afișării titlului, înlocuind `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 versiunea v5.4.2. Iată filtrele pe care le puteți utiliza pentru a manipula tag-ul de titlu:
function wp_get_document_title() {
/**
* Filtrează titlul documentului înainte de a fi generat.
*
* Transmiterea unei valori non-goale va scurta circuitul wp_get_document_title(),
* returnând acea valoare în schimb.
*
* @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 titlul documentului. Valoare implicită '-'.
*/
$sep = apply_filters( 'document_title_separator', '-' );
/**
* Filtrează părțile 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 prin care puteți face acest lucru.
Prima utilizează filtrul pre_get_document_title
care scurtează 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 este generat folosind 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 );
