Modificarea dinamică a titlului unei pagini din interiorul unui plugin
Fiecare pagină WordPress poate fi descrisă ca având două titluri:
Titlul paginii/articolului, care este afișat în cadrul paginii/articolului prin apelul funcției
the_title()
Tag-ul HTML
<title></title>
care afișează titlul în partea de sus a browserului
Scriu un plugin care la un moment dat ar trebui să modifice titlul unei pagini în mod dinamic (de fapt, ar trebui să modifice ambele titluri descrise mai sus).
Astfel, pentru pasul 1 de mai sus, am găsit multiple soluții pe Stack Overflow (precum aceasta sau aceasta). Acestea sunt excelente doar pentru pasul 1 de mai sus.
Pentru pasul 2, am găsit această soluție; pe scurt, așa funcționează:
add_filter('wp_title', 'change_page_title');
function change_page_title ($title) {
// Facem ceva magic, și eventual modificăm $title apoi îl returnăm
return $title;
}
Dar soluția sugerată nu funcționează pentru mine; și prin nefuncționare mă refer la faptul că filtrul nu apelează funcția asociată. Nu sunt sigur care este problema; este pentru că acest filtru este apelat din interiorul plugin-ului și nu din temă? (Doar ca informație, nu am acces la fișierele temei, așa că trebuie făcut din interiorul plugin-ului).
Cum pot realiza acest lucru? Cum pot modifica titlul din browser al unei pagini în mod dinamic din interiorul unui plugin?
Mulțumesc.

O postare sau pagină are doar un singur titlu, tag-ul <title>
reprezintă titlul documentului.
Filtrul wp_title
filtrează rezultatul funcției wp_title()
, care era folosit anterior pentru a afișa titlul documentului. În WordPress 4.1, a fost introdus suportul pentru title-tag în teme, iar wp_get_document_title()
este utilizat în locul funcției wp_title()
. Prin urmare, dacă tema ta suportă title-tag
, filtrul wp_title
nu are efect, dar poți folosi alte filtre:
pre_get_document_title
pentru a seta un titlu nou
add_filter( 'pre_get_document_title', 'cyb_change_page_title' );
function cyb_change_page_title () {
return "Titlu personalizat";
}
document_title_separator
pentru a filtra separatorul din titlu
add_filter('document_title_separator', 'cyb_change_document_title_separator');
function cyb_change_document_title_separator ( $sep ) {
return "|";
}
documente_title_parts
pentru a filtra diferite părți ale titlului: titlu, număr de pagină, slogan și numele site-ului.
add_filter( 'document_title_parts', 'cyb_change_document_title_parts' );
function cyb_change_document_title_parts ( $title_parts ) {
$title_parts['title'] = 'Titlu personalizat';
$title_parts['page'] = 54;
$title_parts['tagline'] = "Slogan personalizat";
$title_parts['site'] = "Site-ul meu"; // Când nu ești pe pagina principală
return $title_parts;
}
PS: Poți folosi current_theme_supports( 'title-tag' )
pentru a verifica dacă tema suportă title-tag
sau nu.

dar cum să transmit metadatele unice ale paginilor în funcțiile de filtrare pe bază de pagină individuală?

Poți folosi funcții precum is_page()
, is_single()
, is_singular()
și altele asemenea, pentru a verifica pagina sau articolul curent.
