Remova “Category:”, “Tag:”, “Author:” do the_archive_title

50

Eu tenho o seguinte código no archive.php do meu tema:

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

Isso me dá títulos como "Categoria: Rússia", "Etiqueta: América", "Autor: John".

Gostaria de remover a parte "Category:", "Tag:" e "Author:" e apenas exibir os nomes da categoria, tag e autor.

Alguém sabe como fazer isso?

Obrigado.

usuario
fonte

Respostas:

80

Você pode estender o get_the_archive_titlefiltro que mencionei nesta resposta

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_tax() ) { //for custom post types
            $title = sprintf( __( '%1$s' ), single_term_title( '', false ) );
        }    
    return $title;    
});
Pieter Goosen
fonte
2
Isso funciona! Obrigado, Pieter! Caso usuários menos experientes em tecnologia procurem a mesma solução: Você adiciona o código de Pieter ao seu arquivo functions.php e pronto!
Nick
Faça isso em um tema filho para que suas alterações não se percam na atualização de um tema.
Jürgen Paul
1
Isso funciona muito bem, mas faltam casos para arquivos e taxonomias personalizadas.
JacobTheDev
Veja a solução de Ben Gillbanks para todos os arquivos e taxonomias de tipo de publicação.
Dan Knauss
25

Usar função single_term_title()

Тимофей А.
fonte
Você pode fazer as coisas de várias maneiras no WP, mas eu sempre optei pelas soluções mais simples. Obrigado Timo.
f055 11/01/19
1
Bem, isso simplesmente não funciona para todos os arquivos que não são termos. Portanto, na minha opinião, não é uma solução muito boa.
GDY
9

Para título do CPT Sem palavra: 'Arquivo':

Se você estiver criando um modelo de arquivamento personalizado para um CPT e quiser gerar apenas o título do CPT sem nenhuma palavra extra como "Arquivar", use a seguinte função:

echo post_type_archive_title( '', false );

De developer.wordpress.org

Mike
fonte
5

Sinto que isso acabou simplificando as coisas, mas foi o que fiz ...

<h1><?php echo str_replace("Archives: ", "", get_the_archive_title()); ?></h1>
Tisch
fonte
1
isso não funcionaria para um site que não seja em inglês.
Maxwell sc
2

echo '<h1 class="page-title">' . single_cat_title( '', false ) . '</h1>'; em taxonomy-category.php fora do público do tema.

Hoang Oanh
fonte
1

Eu usaria um filtro e o colocaria em um arquivo functions.php

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

   $title =  single_cat_title( '', false );
   return $title; 
}
Yaworek
fonte
0

Supondo que o formato seja sempre :,Prefix: Archive Name podemos encontrar o primeiro dois pontos seguido por um espaço e mostrar o conteúdo somente depois disso, usando get_the_archive_title () com as funções substr () e strpos () do PHP .

<?php // Only show the portion of the string following the first ": "
  echo substr(get_the_archive_title(), strpos(get_the_archive_title(), ': ') + 2);
?>
t-jam
fonte
-2

Você pode usar o seguinte para ter apenas o título sem o prefixo

single_cat_title();
Xiomara
fonte
2
Embora verdadeiro, isso já foi sugerido em outras respostas.
Nicolai
-4

diretório: wp-includes

Arquivo: general-template.php

função find: get_the_archive_title() change:

if ( is_category() ) {
        $title = sprintf( __( 'Category: %s' ), single_cat_title( '', false ) );
    } elseif ( is_tag() ) {
        $title = sprintf( __( 'Tag: %s' ), single_tag_title( '', false ) );
    } elseif ( is_author() ) {
        $title = sprintf( __( 'Autor: %s' ), '<span class="vcard">' . get_the_author() . '</span>' );
    }

para:

if ( is_category() ) {
        $title = sprintf( __( '%s' ), single_cat_title( '', false ) );
    } elseif ( is_tag() ) {
        $title = sprintf( __( '%s' ), single_tag_title( '', false ) );
    } elseif ( is_author() ) {
        $title = sprintf( __( '%s' ), '<span class="vcard">' . get_the_author() . '</span>' );
    }//if you want to remove or just change text if you need to
Dragan Nikolic
fonte
3
Err, você está realmente sugerindo hackear o núcleo aqui?
Cjbj 6/09
3
Essa é uma ideia muito, muito ruim. Você não pode atualizar agora sem criar uma ramificação separada.
fuxia
É lamentável que, se eu quebrar os papéis, dou uma palavra para isso, mas essa é apenas mais uma solução, nada malicioso. Então, você disse que eu hackeava meu próprio site ou não posso compartilhar código dos arquivos principais?
Dragan Nikolic
Bem, é o seu site e você pode editar o que quiser - até os arquivos principais. No entanto, a web vai quebrar se você atualizar seu Wordpress ...
Raccoon