Come personalizzare the_archive_title ()?


41

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

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

Ma questo mostra i miei titoli come "Categoria: Titolo categoria " anziché semplicemente il titolo senza la "Categoria:" anteposta.

Il mio primo istinto è stato quello di ignorare get_the_archive_title()da wp-includes/general-template. Ma da quello che ho letto, apparentemente non dovrei mai alterare le cose core di wordpress, anche con sostituzioni da un tema figlio.

Qual è il modo migliore per controllare l'output di the_archive_title()?


Pubblica la tua soluzione come risposta separata. Puoi anche accettare il mio e accettare il tuo se lo desideri :-)
Pieter Goosen il

Spiacenti, ho pensato di aver eliminato questa modifica. Il tuo metodo ha finito per essere migliore, quindi intendevo eliminare il mio. Lo farò ora.
fildred13,

Risposte:


40

Se guardi il codice sorgente diget_the_archive_title() , vedrai che c'è un filtro fornito, chiamato get_the_archive_title, attraverso il quale puoi filtrare l'output dalla funzione.

È possibile utilizzare quanto segue per modificare l'output in una pagina di categoria

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

    if( is_category() ) {

        $title = single_cat_title( '', false );

    }

    return $title;

});

6
Questo non funziona su una pagina di archivio con un titolo di Archive: Books(dove Booksè un tipo di post personalizzato). La single_cat_title()funzione restituisce un titolo di pagina solo se il tipo è una categoria o tag . Puoi modificare la tua risposta per includere una soluzione che funziona con tutti i tipi di contenuto?
Quinn Comendant,

@QuinnComendant Guarda il codice sorgente, linee 1239 e 1240 :-). Se hai un problema, fai semplicemente una nuova domanda specifica per la tua domanda
Pieter Goosen,

1
Giusto, uno deve restituire un titolo alternativo per ogni tassonomia o tipo di post per cui vogliono titoli diversi. Ho pubblicato una risposta che esclude i prefissi da tutti i tipi.
Quinn Comendant,

28

La risposta accettata funziona per rimuovere il Category:prefisso dai titoli di archivio di categoria, ma non da altri tipi di tassonomia o post. Per escludere altri prefissi, ci sono due opzioni:

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

    // Return an alternate title, without prefix, for every type used in the 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', 'yearly archives date format' ) );
        } elseif ( is_month() ) {
            $title = get_the_date( _x( 'F Y', 'monthly archives date format' ) );
        } elseif ( is_day() ) {
            $title = get_the_date( _x( 'F j, Y', 'daily archives date format' ) );
        } elseif ( is_tax( 'post_format' ) ) {
            if ( is_tax( 'post_format', 'post-format-aside' ) ) {
                $title = _x( 'Asides', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-gallery' ) ) {
                $title = _x( 'Galleries', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-image' ) ) {
                $title = _x( 'Images', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-video' ) ) {
                $title = _x( 'Videos', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-quote' ) ) {
                $title = _x( 'Quotes', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-link' ) ) {
                $title = _x( 'Links', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-status' ) ) {
                $title = _x( 'Statuses', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-audio' ) ) {
                $title = _x( 'Audio', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-chat' ) ) {
                $title = _x( 'Chats', 'post format archive title' );
            }
        } elseif ( is_post_type_archive() ) {
            $title = post_type_archive_title( '', false );
        } elseif ( is_tax() ) {
            $title = single_term_title( '', false );
        } else {
            $title = __( 'Archives' );
        }
        return $title;
    });
  2. Oppure, semplicemente rimuovi tutto ciò che sembra un prefisso del titolo (che può alterare i titoli reali che contengono una parola seguita dal carattere due punti):

    // Simply remove anything that looks like an archive title prefix ("Archive:", "Foo:", "Bar:").
    add_filter('get_the_archive_title', function ($title) {
        return preg_replace('/^\w+: /', '', $title);
    });

6

Puoi usare

echo '<h1 class="page-title">' . single_cat_title( '', false ) . '</h1>';

Questo non funziona su una pagina di archivio con un titolo di Archive: Books (dove Books è un tipo di post personalizzato).
Quel ragazzo brasiliano il

@ThatBrazilianGuy single_cat_titleutilizza single_term_titleinternamente, che funziona anche con le tassonomie. Assicurati che il tuo tema non abbia uno dei seguenti modelli definiti: taxonomy-book.phpo taxonomy.php, perché hanno la precedenza archive.php. Inoltre, considera di provare uno qualsiasi dei metodi nelle altre risposte. Questa risposta è piuttosto vecchia, funzionava bene al momento della pubblicazione, ma non sto più sviluppando per WordPress.
Andrei Gheorghiu,

6

Un'altra opzione è:

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

Sostituisci marchio: con qualunque testo tu voglia eliminare.

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


the_archive_title () fa eco al titolo e get_the_archive_title () no, quindi sono sostanzialmente gli stessi. Se è necessario modificare il contenuto, utilizzare get.
Robert è andato il

1

Ben Gillbanks ha una bella soluzione che gestisce tutti i tipi di posta e tassonomie:

function hap_hide_the_archive_title( $title ) {
// Skip if the site isn't LTR, this is visual, not functional.
// Should try to work out an elegant solution that works for both directions.
if ( is_rtl() ) {
    return $title;
}
// Split the title into parts so we can wrap them with spans.
$title_parts = explode( ': ', $title, 2 );
// Glue it back together again.
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' );

0

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.