Come modificare il separatore nel titolo

21 set 2015, 11:41:28
Visualizzazioni: 19.4K
Voti: 9

Modificare il separatore del titolo.

Sto lavorando con il tema starter Underscores. Voglio apportare una piccola modifica al titolo, cambiando il separatore da "Titolo articolo | nome sito" a "Titolo articolo - nome sito".

Il modo più semplice per farlo era inserire:

<title><?php wp_title('-', true, 'right' ); ?><?php bloginfo( 'name' ); ?></title>

nell'header. Ma ora ho letto che con l'introduzione di add_theme_support( 'title-tag' ); non si dovrebbe usare il markup <title> nell'header.

Quindi c'è un modo semplice per modificare il separatore nel titolo?

Perché questa domanda è diversa da altre simili: Si tratta veramente delle best practice, dall'introduzione di add_theme_support( 'title-tag' ); e di come usarlo e modificarlo, dato che non dovremmo più usare il tag <title> nell'header.

[Spero davvero di non dover scrivere 8 righe di codice per una modifica così piccola. Se decido alla fine di usare il tag <title> come soluzione più diretta, dovrei commentare/rimuovere add_theme_support( 'title-tag' ); da functions.php?]

1
Commenti

possibile duplicato di Cambia il separatore del Meta Title e rimuovi nella homepage

mmm mmm
21 set 2015 12:16:30
Tutte le risposte alla domanda 2
6
20

AGGIORNAMENTO per WordPress 4.4

A partire da WordPress 4.4 il filtro wp_title non funziona più perché la funzione wp_title() non viene più utilizzata nel core. Questa funzione è stata contrassegnata come deprecata, poi ripristinata fino a nuovo avviso ma gli autori di temi sono scoraggiati dal suo utilizzo. Per questo motivo, il filtro wp_title continuerà a funzionare se utilizzerai direttamente la funzione wp_title() nel tuo tema, ma non è raccomandato.

Ci sono nuovi filtri per personalizzare il titolo del documento quando il supporto per title-tag è abilitato nel tema:

  1. pre_get_document_title
  2. document_title_parts
  3. document_title_separator.

Se vuoi solo personalizzare il separatore, puoi usare document_title_separator in questo modo:

add_filter( 'document_title_separator', 'cyb_document_title_separator' );
function cyb_document_title_separator( $sep ) {

    $sep = "-";

    return $sep;

}

Risposta precedente

Puoi usare il filtro wp_title per personalizzare il tag <title>.

add_filter( 'wp_title', 'customize_title_tag', 10, 3 );
function customize_title_tag( $title, $sep, $seplocation ) {


    // Personalizza $title qui.
    // Esempio preso da https://generatepress.com/forums/topic/title-tag-separator/
    $title = str_replace( '|', '-', $title );

    return $title;

}

Un esempio più complesso di come usare questo filtro (tratto dal tema TwentyTwelve):

function twentytwelve_wp_title( $title, $sep ) {
    global $paged, $page;

    if ( is_feed() )
        return $title;

    // Aggiunge il nome del sito.
    $title .= get_bloginfo( 'name' );

    // Aggiunge la descrizione del sito per la home/front page.
    $site_description = get_bloginfo( 'description', 'display' );
    if ( $site_description && ( is_home() || is_front_page() ) )
        $title = "$title $sep $site_description";

    // Aggiunge un numero di pagina se necessario.
    if ( $paged >= 2 || $page >= 2 )
        $title = "$title $sep " . sprintf( __( 'Pagina %s', 'twentytwelve' ), max( $paged, $page ) );

    return $title;
}
add_filter( 'wp_title', 'twentytwelve_wp_title', 10, 2 );
21 set 2015 12:14:15
Commenti

Grazie. Ho verificato. Il problema è che TwentyTwelve non utilizza add_theme_support( 'title-tag' ); che tra l'altro è ora richiesto come best practice. Utilizza la sua funzione personalizzata e <title></title?> nell'header.php (cosa che non è più consentita). E credo che questa specifica funzione non modifichi il separatore.

IXN IXN
21 set 2015 13:19:26

Era solo un esempio di come puoi usare il filtro wp_title per personalizzare l'output del tag title, non importa se il tema supporta title-tag o utilizza la funzione wp_title(), il filtro funziona per entrambi.

cybmeta cybmeta
21 set 2015 14:16:15

La risposta di @IXN è stata aggiornata per WordPress 4.4

cybmeta cybmeta
17 dic 2015 11:47:13

wp_title() non è deprecata, è stata ripristinata fino a nuovo avviso. Sì, non è più consigliato utilizzarla, ma non è deprecata

Pieter Goosen Pieter Goosen
17 dic 2015 12:13:14

Oh, sì, è stata ripristinata, non lo sapevo. Ma, comunque, il filtro wp_title non funziona se non usi direttamente la funzione wp_title().

cybmeta cybmeta
17 dic 2015 13:25:50

Risposta aggiornata nuovamente con informazioni più accurate. Grazie a Pieter per aver fatto notare che wp_title() è stata ripristinata.

cybmeta cybmeta
17 dic 2015 13:38:52
Mostra i restanti 1 commenti
0

Il modo in cui viene generato il titolo del documento è cambiato a partire da WordPress v4.4.0. Ora è wp_get_document_title a determinare come viene generato il titolo:

/**
 * Mostra il tag title con il contenuto.
 *
 * @ignore
 * @since 4.1.0
 * @since 4.4.0 Miglioramento dell'output del titolo che ha sostituito `wp_title()`.
 * @access private
 */
function _wp_render_title_tag() {
    if ( ! current_theme_supports( 'title-tag' ) ) {
        return;
    }

    echo '<title>' . wp_get_document_title() . '</title>' . "\n";
}

Ecco il codice dalla versione 5.4.2. Questi sono i filtri che puoi utilizzare per manipolare il tag del titolo:

function wp_get_document_title() {
    /**
    * Filtra il titolo del documento prima che venga generato.
    *
    * Passare un valore non vuoto interromperà wp_get_document_title(),
    * restituendo quel valore invece.
    *
    * @since 4.4.0
    *
    * @param string $title Il titolo del documento. Valore predefinito stringa vuota.
    */
    $title = apply_filters( 'pre_get_document_title', '' );
    if ( ! empty( $title ) ) {
        return $title;
    }
    // --- codice omesso ---
    /**
    * Filtra il separatore per il titolo del documento.
    *
    * @since 4.4.0
    *
    * @param string $sep Separatore del titolo del documento. Predefinito '-'.
    */
    $sep = apply_filters( 'document_title_separator', '-' );

    /**
    * Filtra le parti del titolo del documento.
    *
    * @since 4.4.0
    *
    * @param array $title {
    *     Le parti del titolo del documento.
    *
    *     @type string $title   Titolo della pagina visualizzata.
    *     @type string $page    Opzionale. Numero della pagina se paginata.
    *     @type string $tagline Opzionale. Descrizione del sito nella home page.
    *     @type string $site    Opzionale. Titolo del sito quando non nella home page.
    * }
    */
    $title = apply_filters( 'document_title_parts', $title );
    // --- codice omesso ---
    return $title;
}

Quindi ci sono due modi per farlo.

Il primo utilizza il filtro pre_get_document_title che interrompe la generazione del titolo ed è quindi più performante se non devi apportare modifiche al titolo corrente:

function custom_document_title( $title ) {
    return 'Ecco il nuovo titolo';
}
add_filter( 'pre_get_document_title', 'custom_document_title', 10 );

Il secondo modo utilizza gli hook document_title_separator e document_title_parts per il titolo e il separatore del titolo che vengono eseguiti più avanti nella funzione, dopo che il titolo è stato generato utilizzando funzioni come single_term_title o post_type_archive_title in base alla pagina e sta per essere visualizzato:

// La funzione personalizzata deve restituire una stringa
function custom_seperator( $sep ) {
   return '>';
}
add_filter( 'document_title_separator', 'custom_seperator', 10 );

// La funzione personalizzata deve restituire un array
function custom_html_title( $title ) {
   return array(
     'title' => 'Titolo Personalizzato',
     'site'  => 'Sito Personalizzato'
    );
}
add_filter( 'document_title_parts', 'custom_html_title', 10 );
16 giu 2020 17:26:54