Setarea titlului folosind filtrul wp_title

8 mai 2012, 11:39:10
Vizualizări: 31.8K
Voturi: 2

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

1
Comentarii

PS Această metodă este acum învechită, vezi: https://wordpress.stackexchange.com/a/228063/152624

Jesse Nickles Jesse Nickles
11 iun. 2024 22:41:08
Toate răspunsurile la întrebare 1
8

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;
}
8 mai 2012 11:53:18
Comentarii

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

Richard Bagshaw Richard Bagshaw
8 mai 2012 12:51:49

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().

Bainternet Bainternet
8 mai 2012 15:55:47

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.

Chip Bennett Chip Bennett
8 mai 2012 17:19:02

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

Bainternet Bainternet
8 mai 2012 18:05:16

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.

Chip Bennett Chip Bennett
8 mai 2012 18:11:10

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.

Richard Bagshaw Richard Bagshaw
8 mai 2012 19:22:20

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.

Richard Bagshaw Richard Bagshaw
8 mai 2012 19:23:14

Cred că ai posibilitatea să ai Filtre suplimentare deja conectate la Titlul tău. Încearcă să dezactivezi Plugin-urile și să treci la Twenty Twelve, și vezi dacă problema încă există.

fischi fischi
19 feb. 2013 18:27:51
Arată celelalte 3 comentarii