Nu pot modifica wp_title folosind add_filter
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?

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' );

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.

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

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;
}

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?

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
?

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.
