Come personalizzare the_archive_title()?

24 gen 2015, 21:57:00
Visualizzazioni: 123K
Voti: 51

Nel file archive.php del mio tema child, ho il seguente codice per visualizzare il titolo delle mie pagine di archivio:

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

Ma questo visualizza i miei titoli come "Categoria: Titolo Categoria" invece di mostrare semplicemente il titolo senza il prefisso "Categoria: ".

Il mio primo istinto è stato quello di sovrascrivere get_the_archive_title() da wp-includes/general-template. Ma da quello che ho letto, apparentemente non dovrei mai modificare il core di WordPress, nemmeno con override da un tema child.

Qual è quindi il modo migliore, seguendo le best practice, per controllare l'output di the_archive_title()?

2
Commenti

Pubblica la tua soluzione come risposta separata. Puoi anche rimuovere l'accettazione della mia e accettare la tua se lo desideri :-)

Pieter Goosen Pieter Goosen
27 gen 2015 21:19:59

Ops, pensavo di aver eliminato questa modifica. Il tuo metodo si è rivelato migliore, quindi intendevo eliminare il mio. Lo farò ora.

fildred13 fildred13
27 gen 2015 23:27:46
Tutte le risposte alla domanda 7
3
55

Se guardi il codice sorgente di get_the_archive_title(), vedrai che è presente un filtro chiamato get_the_archive_title, attraverso il quale puoi filtrare l'output della funzione.

Puoi utilizzare il seguente codice per modificare l'output su una pagina di categoria

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

    if( is_category() ) {

        $title = single_cat_title( '', false );

    }

    return $title;

});
25 gen 2015 05:36:02
Commenti

Questo non funziona su una pagina di archivio con un titolo del tipo Archivio: Libri (dove Libri è un custom post type). La funzione single_cat_title() restituisce un titolo di pagina solo se il tipo è una categoria o un tag. Puoi modificare la tua risposta per includere una soluzione che funzioni con tutti i tipi di contenuto?

Quinn Comendant Quinn Comendant
25 set 2015 22:58:26

@QuinnComendant Guarda il codice sorgente, righe 1239 e 1240 :-). Se hai un problema, fai semplicemente una nuova domanda specifica per il tuo caso

Pieter Goosen Pieter Goosen
25 set 2015 23:03:38

Esatto, bisogna restituire un titolo alternativo per ogni tassonomia o post type per cui si vogliono titoli diversi. Ho pubblicato una risposta che esclude i prefissi da tutti i tipi.

Quinn Comendant Quinn Comendant
27 set 2015 21:52:44
1
36

La risposta accettata funziona per rimuovere il prefisso Categoria: dai titoli degli archivi di categoria, ma non per altre tassonomie o tipi di post. Per escludere altri prefissi, ci sono due opzioni:

  1. Ricostruire il titolo per tutte le varianti utilizzate nella funzione originale get_the_archive_title():

    // Restituisce un titolo alternativo, senza prefisso, per ogni tipo utilizzato in 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', 'formato data archivi annuali' ) );
        } elseif ( is_month() ) {
            $title = get_the_date( _x( 'F Y', 'formato data archivi mensili' ) );
        } elseif ( is_day() ) {
            $title = get_the_date( _x( 'F j, Y', 'formato data archivi giornalieri' ) );
        } elseif ( is_tax( 'post_format' ) ) {
            if ( is_tax( 'post_format', 'post-format-aside' ) ) {
                $title = _x( 'Appunti', 'titolo archivio formato post' );
            } elseif ( is_tax( 'post_format', 'post-format-gallery' ) ) {
                $title = _x( 'Gallerie', 'titolo archivio formato post' );
            } elseif ( is_tax( 'post_format', 'post-format-image' ) ) {
                $title = _x( 'Immagini', 'titolo archivio formato post' );
            } elseif ( is_tax( 'post_format', 'post-format-video' ) ) {
                $title = _x( 'Video', 'titolo archivio formato post' );
            } elseif ( is_tax( 'post_format', 'post-format-quote' ) ) {
                $title = _x( 'Citazioni', 'titolo archivio formato post' );
            } elseif ( is_tax( 'post_format', 'post-format-link' ) ) {
                $title = _x( 'Link', 'titolo archivio formato post' );
            } elseif ( is_tax( 'post_format', 'post-format-status' ) ) {
                $title = _x( 'Stati', 'titolo archivio formato post' );
            } elseif ( is_tax( 'post_format', 'post-format-audio' ) ) {
                $title = _x( 'Audio', 'titolo archivio formato post' );
            } elseif ( is_tax( 'post_format', 'post-format-chat' ) ) {
                $title = _x( 'Chat', 'titolo archivio formato post' );
            }
        } elseif ( is_post_type_archive() ) {
            $title = post_type_archive_title( '', false );
        } elseif ( is_tax() ) {
            $title = single_term_title( '', false );
        } else {
            $title = __( 'Archivi' );
        }
        return $title;
    });
    
  2. Oppure, semplicemente rimuovere qualsiasi cosa sembri un prefisso del titolo (che potrebbe modificare titoli effettivi contenenti una parola seguita dal carattere due punti):

    // Rimuove semplicemente qualsiasi cosa sembri un prefisso del titolo dell'archivio ("Archivio:", "Foo:", "Bar:").
    add_filter('get_the_archive_title', function ($title) {
        return preg_replace('/^\w+: /', '', $title);
    });
    
27 set 2015 21:49:41
Commenti

Per i titoli che contengono spazi come link type: tv l'espressione regolare deve essere /^(\w|\s)+: /

aitor aitor
19 apr 2020 11:18:58
1

Un'altra opzione è:

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

Sostituisci 'Brand:' con il testo che vuoi rimuovere.

Vale la pena esaminare la differenza tra get_the_archive_title() e the_archive_title(). the_archive_title() restituisce un array, get_the_archive_title() restituisce una stringa.

25 giu 2015 07:18:44
Commenti

the_archive_title() visualizza il titolo mentre get_the_archive_title() non lo fa, quindi sono sostanzialmente la stessa cosa. Se hai bisogno di modificare il contenuto allora dovresti usare get.

Robert Went Robert Went
20 ago 2018 01:32:59
2

Potresti usare

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

Questo non funziona su una pagina archivio con un titolo come Archivio: Libri (dove Libri è un custom post type).

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

@ThatBrazilianGuy single_cat_title utilizza internamente single_term_title, che funziona anche con le tassonomie. Assicurati che il tuo tema non abbia uno dei seguenti template definiti: taxonomy-book.php o taxonomy.php, perché hanno la precedenza su archive.php. Inoltre, considera di testare uno dei metodi nelle altre risposte. Questa risposta è piuttosto vecchia, funzionava bene quando l'ho pubblicata, ma non sviluppo più per WordPress.

tao tao
26 apr 2017 23:55:19
0

Ben Gillbanks ha trovato una soluzione elegante che gestisce tutti i tipi di post e tassonomie:

function hap_hide_the_archive_title( $title ) {
// Salta se il sito non è LTR, questo è visivo, non funzionale.
// Dovremmo provare a trovare una soluzione elegante che funzioni per entrambe le direzioni.
if ( is_rtl() ) {
    return $title;
}
// Divide il titolo in parti per poterle avvolgere con span.
$title_parts = explode( ': ', $title, 2 );
// Ricompone il titolo.
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 gen 2018 07:52:53
1

Puoi utilizzare post_type_archive_title() per ottenere il titolo di un archivio senza il testo "Archivi:".

17 apr 2018 18:23:39
Commenti

Come si visualizza il titolo dell'archivio del tipo di post se 'get_post_type_archive_title()' non esiste?

Krys Krys
24 ago 2021 12:42:48
0

Usa questo invece di the_archive_title(). Funziona con CPT e tassonomie personalizzate.

<?php
$term = $wp_query->get_queried_object();
$term_title = $term->label //funziona con CPT (es. Libri)
?? $term->name //funziona con termini di tassonomie personalizzate (restituisce Piccolo in taglia/piccolo)
?? "senza titolo";
?>
<h1><?php echo $term_title; ?></h1>
25 ago 2022 23:09:09