Como personalizar o the_archive_title ()?


40

No tema do meu filho archive.php, tenho o seguinte código para exibir o título das minhas páginas de arquivo:

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

Mas isso exibe meus títulos como "Categoria: Título da categoria " em vez de simplesmente o título sem a "Categoria:" anterior.

Meu primeiro instinto foi o de substituir get_the_archive_title()a partir wp-includes/general-template. Mas pelo que li, aparentemente não devo alterar nada do wordpress, mesmo com substituições de um tema infantil.

Então, qual é a melhor maneira de controlar a saída the_archive_title()?


Poste sua solução como uma resposta separada. Você também pode mina unaccept e aceitar a sua própria se quiser :-)
Pieter Goosen

Ops, achei que excluí esta edição. Seu método acabou sendo melhor, então eu pretendia excluir o meu. Eu farei isso agora.
usar o seguinte comando

Respostas:


40

Se você olhar o código-fonte deget_the_archive_title() , verá que há um filtro fornecido, chamado get_the_archive_title, através do qual você pode filtrar a saída da função.

Você pode usar o seguinte para alterar a saída em uma página de categoria

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

    if( is_category() ) {

        $title = single_cat_title( '', false );

    }

    return $title;

});

6
Isso não funciona em uma página de arquivo com um título de Archive: Books(onde Booksé um tipo de postagem personalizado). A single_cat_title()função retornará apenas um título da página se o tipo for uma categoria ou tag . Você pode alterar sua resposta para incluir uma solução que funcione com todos os tipos de conteúdo?
Quinn Comendant

@QuinnComendant Veja o código fonte, linhas 1239 e 1240 :-). Se você tiver um problema, basta fazer uma nova pergunta específica à sua pergunta
Pieter Goosen

11
Certo, é preciso retornar um título alternativo para cada taxonomia ou tipo de postagem para o qual eles desejam títulos diferentes. Publiquei uma resposta que exclui prefixos de todos os tipos.
Quinn Comendant 27/09/15

28

A resposta aceita funciona para remover o Category:prefixo dos títulos do arquivo da categoria, mas não para outros tipos de taxonomia ou postagem. Para excluir outros prefixos, há duas opções:

  1. Recrie o título para todas as variantes usadas na get_the_archive_title()função original :

    // 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. Ou simplesmente retire qualquer coisa que pareça com um prefixo de título (que pode alterar os títulos reais que contêm uma palavra seguida pelo caractere de dois pontos):

    // 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

Você poderia usar

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

Isso não funciona em uma página de arquivo com o título Arquivo: Livros (em que Livros é um tipo de postagem personalizado).
Aquele cara brasileiro

O @ThatBrazilianGuy single_cat_titleusa single_term_titleinternamente, que também funciona em taxonomias. Verifique se o seu tema não possui um dos seguintes modelos definidos: taxonomy-book.phpou taxonomy.phpporque eles têm precedência archive.php. Além disso, considere testar qualquer um dos métodos nas outras respostas. Esta resposta é bastante antiga, estava funcionando bem no momento em que a publiquei, mas não estou mais desenvolvendo para o WordPress.
Andrei Gheorghiu

6

Outra opção é:

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

Substitua a marca: pelo texto que você deseja se livrar.

Vale a pena examinar a diferença entre get_the_archive_title () e the_archive_title () the_archive_title () retorna uma matriz get_the_archive_title () retorna uma string


the_archive_title () ecoa o título e get_the_archive_title () não, então eles são basicamente os mesmos. Se você precisar alterar o conteúdo, use get.
Robert Went

1

Ben Gillbanks tem uma boa solução que lida com todos os tipos de postagens e taxonomias:

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

Você pode usar post_type_archive_title()para obter o título de um arquivo sem o texto "Arquivos:".

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.