Удалить "Category:", "Tag:", "Author:" из the_archive_title

27 февр. 2015 г., 07:38:17
Просмотры: 152K
Голосов: 87

У меня есть следующий код в файле archive.php моей темы:

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

Это дает мне заголовки вида "Category: Россия", "Tag: Америка", "Author: Джон".

Я хотел бы удалить части "Category:", "Tag:" и "Author:" и отображать только названия категорий, тегов и имена авторов.

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

Спасибо.

0
Все ответы на вопрос 11
7
137

Вы можете расширить 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()) { // для пользовательских типов записей
        $title = sprintf(__('%1$s'), single_term_title('', false));
    } elseif (is_post_type_archive()) {
        $title = post_type_archive_title('', false);
    }
    return $title;
});
27 февр. 2015 г. 08:37:12
Комментарии

Это работает! Спасибо, Pieter! Для менее технически подкованных пользователей, которые ищут такое же решение: добавьте код Pieter в файл functions.php, и всё готово!

Nick Nick
27 февр. 2015 г. 23:05:56

Делайте это в дочерней теме, чтобы ваши изменения не потерялись при обновлении основной темы.

Jürgen Paul Jürgen Paul
19 авг. 2016 г. 10:01:56

Это работает довольно хорошо, но не учитывает случаи с архивами и пользовательскими таксономиями.

JacobTheDev JacobTheDev
23 нояб. 2016 г. 18:57:42

Смотрите решение Бена Гиллбэнка для архивов всех типов записей и таксономий.

Dan Knauss Dan Knauss
27 янв. 2018 г. 07:54:43

Только что добавил поддержку архивов пользовательских типов записей :)

Maxwell s.c Maxwell s.c
9 мар. 2020 г. 22:43:04

не включает годовые архивы

Corey Corey
16 июл. 2020 г. 21:41:39

Старый ответ, но всё ещё работает. Спасибо. Голосую за с моей стороны.

user9437856 user9437856
5 июл. 2021 г. 13:34:41
Показать остальные 2 комментариев
4
49

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

5 мар. 2016 г. 00:55:07
Комментарии

В WordPress можно делать вещи разными способами, но я всегда выбирал самые простые решения. Спасибо, Тимо.

f055 f055
11 янв. 2018 г. 16:22:34

Но это не работает для всех архивов, которые не являются терминами. Так что, на мой взгляд, не самое лучшее решение.

GDY GDY
5 апр. 2019 г. 10:13:12

@GDY не могли бы вы сказать, какие элементы, не являющиеся терминами, должны отображаться в архивах?

Iggy Iggy
17 дек. 2019 г. 07:19:10

мне возвращается 'null', есть ли какие-то настройки, которые мне нужно установить?

Marcello Perri Marcello Perri
15 дек. 2020 г. 14:38:27
2
22

Для заголовка CPT без слова: 'Архив':

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

post_type_archive_title();

Источник: developer.wordpress.org

10 авг. 2017 г. 13:24:40
Комментарии

Отлично — эта функция именно то, что мне нужно. Обратите внимание, что первый параметр уже по умолчанию равен пустой строке, а второй по умолчанию true, что приводит к выводу результата вместо его возврата... так что вы можете просто использовать post_type_archive_title(), чтобы получить точно такой же результат, как и при echo post_type_archive_title( '', false )

squarecandy squarecandy
9 дек. 2019 г. 01:32:37

Это должен быть принятый ответ!

Suraj Lulla Suraj Lulla
2 февр. 2023 г. 09:07:22
3
14

Начиная с WordPress 5.5 вы можете удалить префикс с помощью этого хука:

add_filter('get_the_archive_title_prefix','__return_empty_string');

1 апр. 2021 г. 22:15:03
Комментарии

Дополнительный контекст: https://wordpress.stackexchange.com/a/408321/152624

Jesse Nickles Jesse Nickles
19 февр. 2024 г. 10:13:50

get_the_archive_title_prefix() возвращает строку, поэтому в качестве callback должна использоваться '__return_empty_string'.

Michael Bryan Sumner Michael Bryan Sumner
16 янв. 2025 г. 23:10:48

@MichaelBryanSumner return false работает, но вы правы, строка была бы более правильным выбором. Обновляю свой ответ, спасибо.

Andrew J Klimek Andrew J Klimek
18 янв. 2025 г. 00:43:09
1
11

Мне кажется, что это слишком упрощённый подход, но вот что я сделал...

<h1><?php echo str_replace("Архивы: ", "", get_the_archive_title()); ?></h1>
30 нояб. 2016 г. 03:09:41
Комментарии

это не сработает для неанглоязычного веб-сайта.

Maxwell s.c Maxwell s.c
9 нояб. 2018 г. 17:50:01
0

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

13 авг. 2016 г. 05:22:02
1

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

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

   $title =  single_cat_title( '', false );
   return $title; 
}
14 мая 2018 г. 13:23:44
Комментарии

Это хорошее решение, но на самом деле стоит проверить is_category() перед обновлением $title с помощью single_cat_title, и если это не is_category(), то просто вернуть $title без изменений..

Paul 501 Paul 501
21 авг. 2020 г. 01:53:36
1

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

single_cat_title();
27 февр. 2018 г. 20:45:37
Комментарии

Хотя это верно, подобное уже предлагалось в других ответах.

Nicolai Grossherr Nicolai Grossherr
27 февр. 2018 г. 20:52:14
0

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

<?php // Отображаем только часть строки после первого ": "
  echo substr(get_the_archive_title(), strpos(get_the_archive_title(), ': ') + 2);
?>
7 окт. 2019 г. 00:59:45
0
// Фильтр для очистки заголовка архива произвольного типа записи
add_filter('post_type_archive_title', '__return_empty_string', 5);
15 февр. 2022 г. 21:53:32
4
-6

директория: 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>' );
    }//если вы хотите убрать или просто изменить текст, если это необходимо
6 сент. 2016 г. 16:38:23
Комментарии

Эм, ты правда предлагаешь взламывать ядро системы?

cjbj cjbj
6 сент. 2016 г. 16:42:38

Это очень, очень плохая идея. Теперь ты не сможешь обновляться без создания отдельной ветки.

fuxia fuxia
6 сент. 2016 г. 16:57:10

Извини, если нарушаю правила, я даю слово, что это просто еще одно решение, ничего вредоносного. Так ты говоришь, что я взламываю собственный сайт или что я не могу делиться кодом из файлов ядра?

Dragan Nikolic Dragan Nikolic
6 сент. 2016 г. 20:36:42

Ну, это ваш сайт, и вы можете редактировать всё, что захотите — даже основные файлы. Однако сайт сломается, если вы обновите WordPress...

Raccoon Raccoon
22 сент. 2016 г. 03:08:06