Удалите «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; 
}

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();

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 ...
Енот
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.