Modificarea dinamică a titlului unei pagini din interiorul unui plugin

24 dec. 2016, 07:35:30
Vizualizări: 20.5K
Voturi: 6

Fiecare pagină WordPress poate fi descrisă ca având două titluri:

  1. Titlul paginii/articolului, care este afișat în cadrul paginii/articolului prin apelul funcției the_title()

  2. 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.

0
Toate răspunsurile la întrebare 2
2

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.

24 dec. 2016 09:08:30
Comentarii

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

Tintinabulator Zea Tintinabulator Zea
22 dec. 2018 22:40:33

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

cybmeta cybmeta
24 dec. 2018 10:29:14
2

Folosind acest cod în fișierul tău page.php sau pe pagina pe care dorești să o modifici <pre> <title><?php wp_title(); ?> | <?php bloginfo('name'); ?></title> </pre>

24 dec. 2016 08:17:30
Comentarii

Vrei să spui în tema? Nu am acces la fișierele temei.

Greeso Greeso
24 dec. 2016 08:24:55

a funcționat. mulțumesc mult

Faisal Ramzan Faisal Ramzan
11 ian. 2020 02:00:26