Удалите «Category:», «Tag:», «Author:» из the_archive_title

51

У меня есть следующий код в архиве моей темы:

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

Это дает мне такие названия, как «Категория: Россия», «Тег: Америка», «Автор: Джон».

Я хотел бы удалить части «Category:», «Tag:» и «Author:» и просто отобразить категорию, тег и имена авторов.

Кто-нибудь знает, как этого добиться?

Спасибо.

Ник
источник

Ответы:

81

Вы можете расширить 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_tax() ) { //for custom post types
            $title = sprintf( __( '%1$s' ), single_term_title( '', false ) );
        }    
    return $title;    
});
Питер Гусен
источник
2
Это работает! Спасибо, Питер! В случае, если менее технически продвинутые пользователи ищут одно и то же решение: вы добавляете код Питера в свой файл functions.php и все!
Ник
Сделайте это в дочерней теме, чтобы ваши изменения не потерялись при обновлении темы.
Юрген Паул
1
Это работает довольно хорошо, но в нем отсутствуют случаи для архивов и пользовательских таксономий.
JacobTheDev
См Бен Gillbanks' решение для всех архивов после типа и таксономии.
Дэн Кнаусс
25

Использовать функцию single_term_title()

Тимофей А.
источник
В WP вы можете делать разные вещи, но я всегда выбирал самые простые решения. Спасибо Тимо.
f055
1
Ну, это не работает для всех архивов, которые не являются терминами. Так что на мой взгляд не очень хорошее решение.
GDY
9

Для заголовка CPT Без слова: «Архив»:

Если вы создаете пользовательский шаблон архива для CPT и хотите вывести только заголовок CPT без лишних слов, например «Архив», используйте следующую функцию:

echo post_type_archive_title( '', false );

С сайта developer.wordpress.org

Майк
источник
5

Я чувствую, что это слишком упрощает вещи, но это то, что я сделал ...

<h1><?php echo str_replace("Archives: ", "", get_the_archive_title()); ?></h1>
Тиш
источник
1
это не будет работать для неанглийского сайта.
Максвелл sc
2

echo '<h1 class="page-title">' . single_cat_title( '', false ) . '</h1>'; в таксономии-category.php вне публичной темы.

Хоанг Оанх
источник
1

Я бы использовал фильтр и поместил бы его в файл functions.php

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

   $title =  single_cat_title( '', false );
   return $title; 
}
Yaworek
источник
0

Предполагая, что формат всегда:, Prefix: Archive Nameмы можем просто найти первое двоеточие, за которым следует пробел, и показывать содержимое только после этого, используя get_the_archive_title () с PHP- функциями substr () и strpos () .

<?php // Only show the portion of the string following the first ": "
  echo substr(get_the_archive_title(), strpos(get_the_archive_title(), ': ') + 2);
?>
т-варенье
источник
-2

Вы можете использовать следующее, чтобы иметь только заголовок без префикса

single_cat_title();
Xiomara
источник
2
Хотя это правда, это было предложено ранее в других ответах.
Николай
-4

каталог: wp-includes

файл: general-template.php

найти функцию: get_the_archive_title() изменить:

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>' );
    }

чтобы:

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
Драган Николич
источник
3
Ты действительно предлагаешь взломать ядро ​​здесь?
cjbj
3
Это очень, очень плохая идея. Вы не можете обновить сейчас без создания отдельной ветки.
fuxia
Извините, если я перебиваю роли, я даю слово для этого, но это просто еще одно решение, не злонамеренное. Итак, вы сказали, что я взломал свой собственный сайт или я не могу поделиться кодом из основных файлов?
Драган Николич
Ну, это ваш сайт, и вы можете редактировать все, что захотите - даже основные файлы. Тем не менее, сеть сломается, если вы обновите свой Wordpress ...
Енот