Cambiare dinamicamente il titolo di una pagina da un plugin
Ogni pagina WordPress può essere descritta come avente due titoli:
Il titolo della pagina/articolo, che viene visualizzato all'interno della pagina/articolo tramite la chiamata alla funzione
the_title()
Il tag HTML
<title></title>
che mostra il titolo nella parte superiore del browser
Sto sviluppando un plugin che in un determinato momento dovrebbe cambiare dinamicamente il titolo di una pagina (in pratica, dovrebbe modificare entrambi i titoli descritti sopra).
Quindi, per il punto 1 sopra, ho trovato diverse soluzioni su Stack Overflow (come questa o questa). Queste sono ottime solo per il punto 1.
Per il punto 2, ho trovato questa soluzione; in sintesi, funziona così:
add_filter('wp_title', 'change_page_title');
function change_page_title ($title) {
// Esegui qualche operazione magica, modifica $title e poi restituiscilo
return $title;
}
Ma la soluzione suggerita non funziona per me; e per non funzionare intendo che il filtro non sta chiamando la funzione associata. Non sono sicuro di quale sia il problema; è perché questo filtro viene chiamato dall'interno del plugin e non dal tema? (Per informazione, non ho accesso ai file del tema, quindi deve essere fatto dall'interno del plugin).
Come posso realizzare questo? Come posso cambiare dinamicamente il titolo del browser di una pagina dall'interno di un plugin?
Grazie.

Un post o una pagina ha un solo titolo, il tag title <title>
è il titolo del documento.
Il filtro wp_title
filtra l'output della funzione wp_title()
, che veniva utilizzata in precedenza per visualizzare il titolo del documento. In WordPress 4.1 è stato introdotto il supporto per title-tag nei temi e wp_get_document_title()
viene utilizzata al posto di wp_title()
. Quindi, se il tuo tema supporta title-tag
, il filtro wp_title
non ha effetto, ma puoi utilizzare altri filtri:
pre_get_document_title
per impostare un nuovo titolo
add_filter( 'pre_get_document_title', 'cyb_change_page_title' );
function cyb_change_page_title () {
return "Titolo personalizzato";
}
document_title_separator
per filtrare il separatore del titolo
add_filter('document_title_separator', 'cyb_change_document_title_separator');
function cyb_change_document_title_separator ( $sep ) {
return "|";
}
documente_title_parts
per filtrare le diverse parti del titolo: titolo, numero di pagina, tagline e nome del sito.
add_filter( 'document_title_parts', 'cyb_change_document_title_parts' );
function cyb_change_document_title_parts ( $title_parts ) {
$title_parts['title'] = 'Titolo personalizzato';
$title_parts['page'] = 54;
$title_parts['tagline'] = "Tagline personalizzata";
$title_parts['site'] = "Il mio sito"; // Quando non si è nella home page
return $title_parts;
}
PS: Puoi usare current_theme_supports( 'title-tag' )
per verificare se il tema supporta title-tag
o meno.

ma come passare i metadati unici di una pagina nelle funzioni di filtro su base pagina per pagina?

Puoi usare funzioni come is_page()
, is_single()
, is_singular()
e così via, per verificare la pagina o post corrente.
