Cambiare dinamicamente il titolo di una pagina da un plugin

24 dic 2016, 07:35:30
Visualizzazioni: 20.5K
Voti: 6

Ogni pagina WordPress può essere descritta come avente due titoli:

  1. Il titolo della pagina/articolo, che viene visualizzato all'interno della pagina/articolo tramite la chiamata alla funzione the_title()

  2. 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.

0
Tutte le risposte alla domanda 2
2

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.

24 dic 2016 09:08:30
Commenti

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

Tintinabulator Zea Tintinabulator Zea
22 dic 2018 22:40:33

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

cybmeta cybmeta
24 dic 2018 10:29:14
2

Utilizza questo codice nella tua page.php o nella pagina che desideri modificare <pre> <title><?php wp_title(); ?> | <?php bloginfo(‘name’); ?></title> </pre>

24 dic 2016 08:17:30
Commenti

Intendi nel tema? Non ho accesso ai file del tema.

Greeso Greeso
24 dic 2016 08:24:55

ha funzionato. grazie mille

Faisal Ramzan Faisal Ramzan
11 gen 2020 02:00:26