Setarea titlului folosind filtrul wp_title
Vreau să fac ceva foarte simplu dar sunt blocat în a găsi unde anume în WordPress trebuie să implementez acest lucru.
Când cineva vizitează o pagină de articol pe site-ul meu WordPress, vreau ca titlul articolului să înlocuiască titlul paginii.
Cred că pot face acest lucru cu filtrul wp_title?
M-am gândit la ceva de genul:
add_filter('wp_title', 'filter_pagetitle');
function filter_pagetitle($title) {
$the_post_id = get_the_ID(); // Obține ID-ul postării curente
$the_post_data = get_post($the_post_id); // Obține datele postării
$title = $the_post_data->post_title; // Setează titlul cu titlul postării
return $title;
}
Totuși, sunt puțin confuz în legătură cu locul unde să pun acest cod. M-am gândit că ar trebui să fie în loop-single.php deoarece vreau să se aplice doar paginilor individuale, dar am văzut de asemenea că trebuie să fie în functions.php în cadrul temei mele?
Orice ajutor ar fi apreciat :-)
Rich
Deoarece wp_title() este de obicei apelat din fișierul header.php al temei tale, acesta rulează pe fiecare pagină WordPress (de obicei pe frontend). Așadar, plasează hook-ul de filtrare și funcția în fișierul functions.php al temei tale și verifică dacă este o postare de blog înainte de a schimba titlul. Ceva de genul acesta:
add_filter('wp_title', 'filter_pagetitle');
function filter_pagetitle($title) {
//verifică dacă este o postare de blog
if (!is_single())
return $title;
//dacă ai ajuns aici, înseamnă că este o postare de blog, așa că schimbă titlul
global $wp_query;
if (isset($wp_query->post->post_title)){
return $wp_query->post->post_title;
}
//dacă WordPress nu poate găsi titlul, returnează cel implicit
return $title;
}

Este exact ceea ce și eu credeam că ar funcționa, problema pe care o am este că functions.php pare să considere că acesta nu este un post individual, așa că returnează doar variabila $title

nu are nicio legătură cu fișierul functions.php, este apelat când fișierul header.php este inclus și dacă acesta conține wp_title().

Sunt de acord cu abordarea, dar de ce să nu folosim direct variabila globală $post
? Adică global $post; $title = $post->post_title;
Nu cred că este nevoie să apelăm get_post()
aici.

@ChipBennett , Da, asta ar funcționa și mai bine, eu doar urmam formatul întrebării, am actualizat răspunsul meu

Alte două puncte: 1) wp_title()
template tag deja returnează Titlul Postării în contextul unei singure postări de blog sau pagini statice, așa că acest filtru este de fapt redundant. 2) ai putea lua în considerare concatenarea conținutului returnat $title
, pentru a nu interfera cu Plugin-urile sau alte funcții (Plugin-uri SEO, etc.) care filtrează titlul documentului.

global $post nu a funcționat pentru mine când am încercat, returna un ID dar acesta era ID-ul celei mai recente povești introduse în baza de date și nu a celei pe care o vizualizam.

toate aceste comentarii sunt lucruri pe care le-am încercat și, în mod ciudat, nu au funcționat, cred că poate exista o problemă cu instalarea WordPress / tema, oricum mulțumesc pentru ajutor.
