Cum să personalizezi the_archive_title()?

24 ian. 2015, 21:57:00
Vizualizări: 123K
Voturi: 51

În fișierul archive.php al temei copil, am următorul cod pentru afișarea titlului paginilor de arhivă:

<?php
    the_archive_title( '<h1 class="page-title">', '</h1>' );
?>

Dar acesta afișează titlurile mele ca "Categorie: Titlul Categoriei" în loc să afișeze simplu titlul fără prefixul "Categorie: ".

Primul meu instinct a fost să suprascriu get_the_archive_title() din wp-includes/general-template. Dar din ce am citit, aparent nu ar trebui să modific niciodată fișierele de bază WordPress, nici măcar cu suprascrieri din tema copil.

Așadar, care este cea mai bună practică pentru a controla output-ul funcției the_archive_title()?

2
Comentarii

Postează-ți soluția ca un răspuns separat. Poți să nu mai accepți pe al meu și să-l accepți pe al tău dacă dorești :-)

Pieter Goosen Pieter Goosen
27 ian. 2015 21:19:59

Ups, credeam că am șters această editare. Metoda ta s-a dovedit mai bună, așa că intenționam să o șterg pe a mea. O voi face acum.

fildred13 fildred13
27 ian. 2015 23:27:46
Toate răspunsurile la întrebare 7
3
55

Dacă te uiți la codul sursă al funcției get_the_archive_title(), vei observa că există un filtru disponibil, numit get_the_archive_title, prin care poți filtra rezultatul returnat de funcție.

Poți utiliza următorul cod pentru a modifica afișarea pe o pagină de categorie

add_filter( 'get_the_archive_title', function ( $title ) {

    if( is_category() ) {

        $title = single_cat_title( '', false );

    }

    return $title;

});
25 ian. 2015 05:36:02
Comentarii

Aceasta nu funcționează pe o pagină de arhivă cu un titlu precum Arhivă: Cărți (unde Cărți este un tip personalizat de postare). Funcția single_cat_title() returnează un titlu de pagină doar dacă tipul este o categorie sau etichetă. Poți modifica răspunsul tău pentru a include o soluție care funcționează cu toate tipurile de conținut?

Quinn Comendant Quinn Comendant
25 sept. 2015 22:58:26

@QuinnComendant Uită-te la codul sursă, liniile 1239 și 1240 :-). Dacă ai o problemă, pur și simplu pune o nouă întrebare specifică problemei tale

Pieter Goosen Pieter Goosen
25 sept. 2015 23:03:38

Corect, trebuie să returnezi un titlu alternativ pentru fiecare taxonomie sau tip de postare pentru care dorești titluri diferite. Am postat un răspuns care exclude prefixele pentru toate tipurile.

Quinn Comendant Quinn Comendant
27 sept. 2015 21:52:44
1
36

Răspunsul acceptat funcționează pentru a elimina prefixul Categorie: din titlurile arhivelor de categorii, dar nu și din alte taxonomii sau tipuri de postări. Pentru a exclude alte prefixe, există două opțiuni:

  1. Reconstruiește titlul pentru toate variantele utilizate în funcția originală get_the_archive_title():

    // Returnează un titlu alternativ, fără prefix, pentru fiecare tip utilizat în get_the_archive_title().
    add_filter('get_the_archive_title', function ($title) {
        if ( is_category() ) {
            $title = single_cat_title( '', false );
        } elseif ( is_tag() ) {
            $title = single_tag_title( '', false );
        } elseif ( is_author() ) {
            $title = '<span class="vcard">' . get_the_author() . '</span>';
        } elseif ( is_year() ) {
            $title = get_the_date( _x( 'Y', 'formatul datei pentru arhive anuale' ) );
        } elseif ( is_month() ) {
            $title = get_the_date( _x( 'F Y', 'formatul datei pentru arhive lunare' ) );
        } elseif ( is_day() ) {
            $title = get_the_date( _x( 'F j, Y', 'formatul datei pentru arhive zilnice' ) );
        } elseif ( is_tax( 'post_format' ) ) {
            if ( is_tax( 'post_format', 'post-format-aside' ) ) {
                $title = _x( 'Notițe', 'titlul arhivei de format post' );
            } elseif ( is_tax( 'post_format', 'post-format-gallery' ) ) {
                $title = _x( 'Galerii', 'titlul arhivei de format post' );
            } elseif ( is_tax( 'post_format', 'post-format-image' ) ) {
                $title = _x( 'Imagini', 'titlul arhivei de format post' );
            } elseif ( is_tax( 'post_format', 'post-format-video' ) ) {
                $title = _x( 'Video-uri', 'titlul arhivei de format post' );
            } elseif ( is_tax( 'post_format', 'post-format-quote' ) ) {
                $title = _x( 'Citate', 'titlul arhivei de format post' );
            } elseif ( is_tax( 'post_format', 'post-format-link' ) ) {
                $title = _x( 'Link-uri', 'titlul arhivei de format post' );
            } elseif ( is_tax( 'post_format', 'post-format-status' ) ) {
                $title = _x( 'Stări', 'titlul arhivei de format post' );
            } elseif ( is_tax( 'post_format', 'post-format-audio' ) ) {
                $title = _x( 'Audio', 'titlul arhivei de format post' );
            } elseif ( is_tax( 'post_format', 'post-format-chat' ) ) {
                $title = _x( 'Conversații', 'titlul arhivei de format post' );
            }
        } elseif ( is_post_type_archive() ) {
            $title = post_type_archive_title( '', false );
        } elseif ( is_tax() ) {
            $title = single_term_title( '', false );
        } else {
            $title = __( 'Arhive' );
        }
        return $title;
    });
    
  2. Sau, pur și simplu elimină orice arată ca un prefix de titlu (ceea ce poate modifica titlurile reale care conțin un cuvânt urmat de caracterul două puncte):

    // Pur și simplu elimină orice arată ca un prefix de titlu ("Arhivă:", "Foo:", "Bar:").
    add_filter('get_the_archive_title', function ($title) {
        return preg_replace('/^\w+: /', '', $title);
    });
    
27 sept. 2015 21:49:41
Comentarii

Pentru titluri care conțin spații, cum ar fi link type: tv, expresia regulată trebuie să fie /^(\w|\s)+: /

aitor aitor
19 apr. 2020 11:18:58
1

O altă opțiune este:

<?php echo str_replace('Brand: ','',get_the_archive_title()); ?>

Înlocuiește 'Brand: ' cu orice text dorești să elimini.

Este util să înțelegi diferența dintre get_the_archive_title() și the_archive_title(): the_archive_title() returnează un array get_the_archive_title() returnează un string

25 iun. 2015 07:18:44
Comentarii

the_archive_title() afișează titlul, în timp ce get_the_archive_title() nu, deci în esență sunt la fel. Dacă trebuie să modifici conținutul, atunci vei folosi get.

Robert Went Robert Went
20 aug. 2018 01:32:59
2

Puteți utiliza

echo '<h1 class="page-title">' . single_cat_title( '', false ) . '</h1>';
25 ian. 2015 04:23:25
Comentarii

Aceasta nu funcționează pe o pagină de arhivă cu titlul Arhivă: Cărți (unde Cărți este un tip personalizat de postare).

That Brazilian Guy That Brazilian Guy
26 apr. 2017 18:36:03

@ThatBrazilianGuy single_cat_title utilizează intern single_term_title, care funcționează și pe taxonomii. Asigură-te că tema ta nu are unul dintre următoarele șabloane definite: taxonomy-book.php sau taxonomy.php, deoarece acestea au prioritate față de archive.php. De asemenea, ia în considerare testarea oricăreia dintre metodele din celelalte răspunsuri. Acest răspuns este destul de vechi, funcționa corect în momentul în care l-am postat, dar nu mai dezvolt pentru WordPress.

tao tao
26 apr. 2017 23:55:19
0

Ben Gillbanks are o soluție elegantă care gestionează toate tipurile de postări și taxonomiile:

function hap_hide_the_archive_title( $title ) {
// Sărim dacă site-ul nu e LTR, acesta este aspect vizual, nu funcțional.
// Ar trebui să încercăm să găsim o soluție elegantă care funcționează pentru ambele direcții.
if ( is_rtl() ) {
    return $title;
}
// Împărțim titlul în părți pentru a le putea înfășura cu span-uri.
$title_parts = explode( ': ', $title, 2 );
// Lipim părțile înapoi împreună.
if ( ! empty( $title_parts[1] ) ) {
    $title = wp_kses(
        $title_parts[1],
        array(
            'span' => array(
                'class' => array(),
            ),
        )
    );
    $title = '<span class="screen-reader-text">' . esc_html( $title_parts[0] ) . ': </span>' . $title;
}
return $title;
}
add_filter( 'get_the_archive_title', 'hap_hide_the_archive_title' );
27 ian. 2018 07:52:53
1

Poți folosi post_type_archive_title() pentru a obține titlul unei arhive fără textul "Arhive:".

17 apr. 2018 18:23:39
Comentarii

Cum afișezi titlul arhivei tipului de postare dacă funcția 'get_post_type_archive_title()' nu există?

Krys Krys
24 aug. 2021 12:42:48
0

Folosește această metodă în loc de the_archive_title(). Funcționează cu CPT (Custom Post Types) și taxonomii personalizate.

<?php
$term = $wp_query->get_queried_object();
$term_title = $term->label //funcționează cu CPT (ex: Cărți)
?? $term->name //funcționează cu termenii din taxonomii personalizate (returnează Mic în mărime/mic)
?? "fără titlu";
?>
<h1><?php echo $term_title; ?></h1>
25 aug. 2022 23:09:09