Cum să schimbi separatorul în titlu

21 sept. 2015, 11:41:28
Vizualizări: 19.4K
Voturi: 9

Schimbă separatorul din titlu.

Lucrez cu tema de bază underscores. Vreau să fac o mică modificare la titlu, schimbând separatorul de la "Titlu articol | nume site" la "Titlu articol - nume site".

Cea mai simplă metodă era să pun:

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

în header.php. Dar acum am citit că odată cu introducerea add_theme_support( 'title-tag' );, nu ar trebui să folosim manual tagul <title> în header.

Există o metodă simplă de a schimba separatorul în titlu?

De ce această întrebare este diferită de altele similare: Aici vorbim despre cea mai bună practică după introducerea add_theme_support( 'title-tag' ); și cum să o modificăm, deoarece nu mai este recomandat să folosim manual tagul <title> în header.

[ Sper sincer că nu va trebui să scriu 8 linii de cod pentru o astfel de mică modificare. Dacă decid în final să folosesc tagul <title> ca soluție mai directă, ar trebui să comentez/elimin add_theme_support( 'title-tag' ); din functions.php? ]

1
Comentarii
Toate răspunsurile la întrebare 2
6
20

ACTUALIZARE pentru WordPress 4.4

Începând cu WordPress 4.4, filtrul wp_title nu mai funcționează deoarece funcția wp_title() nu mai este utilizată în nucleu. Această funcție a fost marcată ca depreciată, apoi reinstituită până la o nouă notificare, dar autorii de teme sunt descurajați să o folosească. Din această cauză, filtrul wp_title va continua să funcționeze dacă utilizați direct funcția wp_title() în tema dumneavoastră, dar acest lucru nu este recomandat.

Există filtre noi pentru personalizarea titlului documentului atunci când suportul pentru title-tag este activat în temă:

  1. pre_get_document_title
  2. document_title_parts
  3. document_title_separator.

Dacă doriți doar să personalizați separatorul, puteți utiliza document_title_separator în felul următor:

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

    $sep = "-";

    return $sep;

}

Răspuns anterior

Puteți utiliza filtrul wp_title pentru a personaliza tag-ul <title>.

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


    // Personalizați $title aici.
    // Exemplu preluat de pe https://generatepress.com/forums/topic/title-tag-separator/
    $title = str_replace( '|', '-', $title );

    return $title;

}

Un exemplu mai complex de utilizare a acestui filtru (preluat din tema TwentyTwelve):

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

    if ( is_feed() )
        return $title;

    // Adăugați numele site-ului.
    $title .= get_bloginfo( 'name' );

    // Adăugați descrierea site-ului pentru pagina principală/front.
    $site_description = get_bloginfo( 'description', 'display' );
    if ( $site_description && ( is_home() || is_front_page() ) )
        $title = "$title $sep $site_description";

    // Adăugați un număr de pagină dacă este necesar.
    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 sept. 2015 12:14:15
Comentarii

Mulțumesc. Am verificat asta. Problema este că TwentyTwelve nu folosește add_theme_support( 'title-tag' ); care, apropo, acum este necesară ca și cea mai bună practică. Folosește propria funcție și <title></title?> în header.php (ceea ce nu mai este permis). Și cred că această funcție specifică nu schimbă separatorul.

IXN IXN
21 sept. 2015 13:19:26

Era doar un exemplu despre cum poți folosi filtrul wp_title pentru a personaliza afișarea etichetei de titlu, nu contează dacă tema suportă title-tag sau folosește funcția wp_title(), filtrul funcționează pentru ambele.

cybmeta cybmeta
21 sept. 2015 14:16:15

Răspunsul lui @IXN a fost actualizat pentru WordPress 4.4

cybmeta cybmeta
17 dec. 2015 11:47:13

wp_title() nu este învechită, a fost reinstituită până la noi informații. Da, nu este recomandat să o mai folosești, dar nu este învechită

Pieter Goosen Pieter Goosen
17 dec. 2015 12:13:14

Ah, da, a fost reinstituită, nu știam. Dar, oricum, filtrul wp_title nu funcționează dacă nu folosești direct funcția wp_title().

cybmeta cybmeta
17 dec. 2015 13:25:50

Răspuns actualizat din nou cu informații mai precise. Mulțumesc lui Pieter pentru sublinierea faptului că wp_title() a fost reinstituită.

cybmeta cybmeta
17 dec. 2015 13:38:52
Arată celelalte 1 comentarii
0

Modul în care este generat titlul documentului s-a schimbat începând cu WordPress v4.4.0. Acum wp_get_document_title dictează cum este generat titlul:

/**
 * Afișează tag-ul de titlu cu conținut.
 *
 * @ignore
 * @since 4.1.0
 * @since 4.4.0 Îmbunătățire a afișării titlului, înlocuind `wp_title()`.
 * @access private
 */
function _wp_render_title_tag() {
    if ( ! current_theme_supports( 'title-tag' ) ) {
        return;
    }

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

Iată codul din versiunea v5.4.2. Iată filtrele pe care le puteți utiliza pentru a manipula tag-ul de titlu:

function wp_get_document_title() {
    /**
    * Filtrează titlul documentului înainte de a fi generat.
    *
    * Transmiterea unei valori non-goale va scurta circuitul wp_get_document_title(),
    * returnând acea valoare în schimb.
    *
    * @since 4.4.0
    *
    * @param string $title Titlul documentului. Valoare implicită string gol.
    */
    $title = apply_filters( 'pre_get_document_title', '' );
    if ( ! empty( $title ) ) {
        return $title;
    }
    // --- tăiat ---
    /**
    * Filtrează separatorul pentru titlul documentului.
    *
    * @since 4.4.0
    *
    * @param string $sep Separator pentru titlul documentului. Valoare implicită '-'.
    */
    $sep = apply_filters( 'document_title_separator', '-' );

    /**
    * Filtrează părțile titlului documentului.
    *
    * @since 4.4.0
    *
    * @param array $title {
    *     Părțile titlului documentului.
    *
    *     @type string $title   Titlul paginii vizualizate.
    *     @type string $page    Opțional. Numărul paginii dacă este paginat.
    *     @type string $tagline Opțional. Descrierea site-ului când este pe pagina principală.
    *     @type string $site    Opțional. Titlul site-ului când nu este pe pagina principală.
    * }
    */
    $title = apply_filters( 'document_title_parts', $title );
    // --- tăiat ---
    return $title;
}

Deci, iată două modalități prin care puteți face acest lucru.

Prima utilizează filtrul pre_get_document_title care scurtează generarea titlului și, prin urmare, este mai performant dacă nu intenționați să faceți modificări la titlul curent:

function custom_document_title( $title ) {
    return 'Acesta este noul titlu';
}
add_filter( 'pre_get_document_title', 'custom_document_title', 10 );

A doua metodă utilizează hook-urile document_title_separator și document_title_parts pentru titlu și separatorul de titlu care sunt executate mai târziu în funcție, după ce titlul este generat folosind funcții precum single_term_title sau post_type_archive_title în funcție de pagină și este pe cale să fie afișat:

// Funcția personalizată trebuie să returneze un string
function custom_seperator( $sep ) {
   return '>';
}
add_filter( 'document_title_separator', 'custom_seperator', 10 );

// Funcția personalizată trebuie să returneze un array
function custom_html_title( $title ) {
   return array(
     'title' => 'Titlu Personalizat',
     'site'  => 'Site Personalizat'
    );
}
add_filter( 'document_title_parts', 'custom_html_title', 10 );
16 iun. 2020 17:26:54