Nu pot modifica wp_title folosind add_filter

12 feb. 2011, 13:31:59
Vizualizări: 22.8K
Voturi: 10

Am o pagină personalizată unde încerc să schimb titlul paginii.
Funcția se execută, dar titlul nu se modifică. Acesta este codul pe care îl folosesc:

  add_filter('wp_title', set_page_title($brand));

  function set_page_title($brand) { 
    $title = 'Designer '.$brand['name'].' - '.get_bloginfo('name');
    //Aici pot să afișez rezultatul și văd că de fapt este declanșat
    return $title;  
  } 

Deci de ce nu funcționează? Folosesc greșit add_filter?

1
Comentarii

Dacă dorești să schimbi doar titlul pentru un șablon specific, cred că ar fi mai potrivit să apelezi funcția ta personalizată pentru titlu în loc de wp_title în marcajul șablonului.

Steve Buzonas Steve Buzonas
27 dec. 2011 21:51:50
Toate răspunsurile la întrebare 3
3
20

Filtrul wp_title este depreciat începând cu WordPress 4.4 (vezi aici). Poți folosi document_title_parts în schimb

function custom_title($title_parts) {
    $title_parts['title'] = "Titlul Paginii";
    return $title_parts;
}
add_filter( 'document_title_parts', 'custom_title' );

În filtrul custom_title, $title_parts conține cheile 'title', 'page' (paginarea, dacă există), 'tagline' (sloganul specificat, doar pe pagina principală) și 'site'. Setează "title" după preferință. WordPress va păstra formatul configurat pentru a concatena totul împreună.

Dacă dorești să suprascrii formatarea titlului în WordPress, folosește pre_get_document_title și furnizează acestui filtru o funcție care primește un șir de caractere și returnează titlul dorit.

function custom_title($title) {
    return "Titlul Paginii";
}
add_filter( 'pre_get_document_title', 'custom_title' );
28 mai 2016 07:09:03
Comentarii

Funcția wp_title a fost restaurată. Urmând link-ul de mai sus, veți găsi comentariul: UPDATE 12 November [2017] – wp_title a fost restaurat până când vor fi identificate utilizări alternative și va fi definit un drum pentru ele.

amurrell amurrell
27 oct. 2018 02:20:49

Începând cu iulie 2020, document_title_parts a funcționat pentru mine, în timp ce wp_title nu a funcționat.

GreatBlakes GreatBlakes
9 iul. 2020 17:16:55

@GreatBlakes Acesta este încă cazul la mine. Începând cu martie 2022, document_title_parts a funcționat pentru mine, în timp ce wp_title nu a funcționat.

Clarus Dignus Clarus Dignus
25 mar. 2022 02:08:56
3

Nu poți pasa un array la set_page_title, funcția de callback acceptă doar titlul original ca parametru de intrare.

Dacă dorești ca funcția ta să funcționeze în acest fel, definește array-ul $brand în afara funcției și fă-l global

  add_filter( 'wp_title', 'set_page_title' );
  $brand = array( 'name' => 'Numele Brandului' );

  function set_page_title( $orig_title ) { 
    global $brand;
    $title = 'Designer '.$brand['name'].' - '.get_bloginfo( 'name' );
    //Aici pot afișa rezultatul și să văd că este de ftriggerat
    return $title;  
  }
12 feb. 2011 15:16:19
Comentarii

Când fac asta, funcția nu este apelată deloc. Am încercat și add_filter('wp_title', 'set_page_title'); Singura modalitate de a apela funcția este prin a face asta: add_filter('wp_title', set_page_title('test'));. Există vreun motiv pentru care nu pot apela funcția în modul tău?

Steven Steven
13 feb. 2011 15:01:38

Cred că știu de ce. S-ar putea să fie pentru că încerc să folosesc add_filter în interiorul custom_template.php și nu în function.php ?

Steven Steven
13 feb. 2011 17:39:41

Trebuie să plasezi această funcție în fișierul function.php care se află în directorul temei tale!

keatch keatch
13 feb. 2011 18:22:29
0

Ceea ce se întâmplă în ambele exemple de cod este că add_filter nu apelează o funcție pentru a accepta o valoare returnată ca titlu nou. Funcția add_filter așteaptă cel puțin doi parametri, primul fiind un șir de caractere care conține 'tag'-ul sau numele filtrului pe care doriți să-l utilizați, iar al doilea este de tip mixt. În cazul utilizării unei funcții definite, ar trebui să folosiți numele funcției ca șir de caractere, poate accepta și un array pentru un callback într-un namespace și o funcție anonimă.

În cazul:

add_filter('wp_title', set_page_title('test'));

Funcția cea mai interioară va fi evaluată prima, transmitând rezultatele sale returnate către următoarea funcție exterioară.

Deci...

add_filter('wp_title', set_page_title(other_function(function() {return "real_filter";})));

Ar transmite șirul 'real_filter' către add_filter, presupunând că toate funcțiile dintre cele două transmit parametrii lor de intrare ca valoare returnată.

Cred că ceea ce ai dori ar fi ceva de genul:

function my_title_filter($old_title, $sep, $seplocation) {
    // Adaugă niște cod pentru a determina dacă/ce vrei să modifici în titlul tău.

    global $brand;

    $title = "Designer " . $brand['name'] . " $sep " . get_bloginfo('name');

    return $title;
}

add_filter('wp_title', 'my_title_filter', 10, 3); // 10 este prioritatea,
    // iar 3 este numărul de argumente pe care funcția le acceptă.
    // wp_title poate transmite 3.

O precizare suplimentară... Filtrul trebuie inițializat înainte ca apply_filters să fie apelat. Și cea mai bună practică este să aveți funcția definită înainte de a apela add_filter.

27 dec. 2011 21:49:28