Există o modalitate de a suprascrie tag-ul <title> specificat în header.php?

26 feb. 2015, 20:43:32
Vizualizări: 14.3K
Voturi: 6

În primul rând, aceasta nu este o întrebare despre SEO și nici despre schimbarea tag-ului title pentru întregul site. Dacă cauți pe Google, vei găsi doar răspunsuri la aceste întrebări.

Deci avem propriul nostru theme și avem control total asupra fișierului header.php. Știm cum să setăm titlul. În prezent arată astfel:

<head>
    <title><?php wp_title(' | ', true, 'right'); bloginfo('name'); ?></title>
etc...

Nu, problema este alta. Pentru majoritatea paginilor dorim ca titlul să apară așa cum este mai sus. Am realizat însă că pentru un anumit custom post type (și șablonul asociat) titlul CPT-ului nu ar trebui să apară public. Este doar pentru uz administrativ. Ciudat, dar așa este. Nu îl afișăm nicăieri în H1, conținut etc.

Dar apare în titlu.

În mod ideal, am dori o modalitate de a suprascrie titlul din header.php direct din șablon, pentru a specifica un titlu alternativ doar pentru această categorie de pagini. Este posibil acest lucru?

0
Toate răspunsurile la întrebare 5
1

Mai întâi, să modificăm <title>-ul tău în:

<title><?php wp_title(' | ', true, 'right'); ?></title>

Deoarece adăugarea directă în șirul titlului nu este o soluție viabilă pe termen lung, este mai bine să folosim un filtru pentru a face modificări la titlu. Așadar, să adăugăm (în functions.php):

add_filter('wp_title', 'my_custom_title');
function my_custom_title( $title )
{
    // Returnează titlul personalizat
    return sprintf("%s %s", $title, get_bloginfo('name'));
}

Apoi, să extindem acest filtru util pentru titlu pentru a face ceea ce dorești:

add_filter('wp_title', 'my_custom_title');
function my_custom_title( $title )
{
    if( is_singular("your_post_type"))
    {
        return ""; // Returnează gol
    }
    // Returnează titlul personalizat
    return sprintf("%s %s", $title, get_bloginfo('name'));
}
26 feb. 2015 21:45:47
Comentarii

+1. Asta e super!!

Adriana Hernández Adriana Hernández
12 apr. 2019 19:06:36
0

Poți dori să filtrezi titlul.

add_filter( 'wp_title', 'wpse179527_wp_title' );
function wpse179527_wp_title( $title ) {
  global $post;
  if ( is_single() && 'custom-post' == get_post_type( $post ) )
    return '';
  return $title;
}
26 feb. 2015 21:22:32
1

Am postat acest răspuns pentru o altă întrebare, dar din moment ce este relevant și mai actualizat, am considerat că ar putea fi util pentru unele persoane.

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

/**
 * Afișează tag-ul title cu conținut.
 *
 * @ignore
 * @since 4.1.0
 * @since 4.4.0 Îmbunătățirea afișării titlului a înlocuit `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 v5.4.2. Acestea sunt filtrele pe care le puteți utiliza pentru a manipula tag-ul title:

function wp_get_document_title() {
    /**
    * Filtrează titlul documentului înainte de a fi generat.
    *
    * Transmiterea unei valori non-goale va scurcircuita wp_get_document_title(),
    * returnând acea valoare în loc.
    *
    * @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 titlu. Implicit '-'.
    */
    $sep = apply_filters( 'document_title_separator', '-' );

    /**
    * Filtrează părțile componente ale 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 în care puteți face acest lucru.

Prima utilizează filtrul pre_get_document_title care scurcircuitează 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 a fost generat utilizând 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:15:17
Comentarii

Mulțumesc pentru acest răspuns detaliat! Funcționează cu adevărat pe WP în 2020, eu nu am reușit să fac să funcționeze răspunsurile anterioare.

JoLoCo JoLoCo
29 iul. 2020 18:11:50
0

Combinând diferite răspunsuri, acesta este lucrul care a funcționat pentru mine pe WordPress v5.7.2 și tipul meu personalizat de post company. Am reușit să suprascriu ușor titlul pe pagina de post personalizată pentru a adăuga Numele Site-ului meu la sfârșit

function custom_document_title( $title ) {
    // Verifică dacă este o pagină singulară de tipul "company"
    if( is_singular("company")) 
    {
        // Returnează titlul formatat: "Titlu - Nume Site"
        return sprintf("%s - %s", $title, get_bloginfo('name'));
    }
    return $title; // Returnează titlul implicit în alte cazuri
}
// Adaugă filtrul pentru a modifica titlul documentului
add_filter( 'pre_get_document_title', 'custom_document_title', 99 );
22 mai 2021 21:42:57
0

Versiunea anterioară nu a funcționat pentru mine în WordPress 6.1.1 deoarece returna un $title gol. Această versiune returnează titlul paginii + numele blogului sau orice text personalizat doriți.

function custom_document_title( $title ) {
    global $post;
    $title = get_the_title($post);
    if( is_singular("event")){
        return sprintf("%s - %s", $title, 'Înregistrare Eveniment');
    } else {
        // Returnează titlul standard WordPress
        return sprintf("%s - %s", $title, get_bloginfo('name'));
    }
}
add_filter( 'pre_get_document_title', 'custom_document_title', 99 );
17 feb. 2023 11:58:28