Удалить "Category:", "Tag:", "Author:" из the_archive_title
У меня есть следующий код в файле archive.php моей темы:
<?php the_archive_title( '<h1 class="page-title">', '</h1>' ); ?>
Это дает мне заголовки вида "Category: Россия", "Tag: Америка", "Author: Джон".
Я хотел бы удалить части "Category:", "Tag:" и "Author:" и отображать только названия категорий, тегов и имена авторов.
Кто-нибудь знает, как это сделать?
Спасибо.
Вы можете расширить 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;
});

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

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

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

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

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

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

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

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

Для заголовка CPT без слова: 'Архив':
Если вы создаете пользовательский шаблон архива для CPT и хотите вывести только заголовок CPT без дополнительных слов, таких как "Архив", используйте следующую функцию:
post_type_archive_title();
Источник: developer.wordpress.org

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

Начиная с WordPress 5.5 вы можете удалить префикс с помощью этого хука:
add_filter('get_the_archive_title_prefix','__return_empty_string');

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

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

Предполагая, что формат всегда: Префикс: Название архива
, мы можем просто найти первое двоеточие, за которым следует пробел, и отобразить только часть строки после этого, используя get_the_archive_title() вместе с PHP-функциями substr() и strpos().
<?php // Отображаем только часть строки после первого ": "
echo substr(get_the_archive_title(), strpos(get_the_archive_title(), ': ') + 2);
?>

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

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

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