Как настроить the_archive_title ()?

В моей программе php моей дочерней темы у меня есть следующий код для отображения заголовка моих страниц архива:

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

Но это отображает мои заголовки как «Категория: Заголовок категории » вместо простого названия без добавленной категории «Категория:».

Мой первый инстинкт состоял в том, чтобы переопределить get_the_archive_title () из wp-includes /general-template . Но из того, что я читал, видимо, я не должен когда-либо изменять материал wordpress, даже с переопределениями из детской темы.

Итак, каков наилучший способ управления выходом the_archive_title () ?

36 голосов | спросил fildred13 24 Jpm1000000pmSat, 24 Jan 2015 22:57:00 +030015 2015, 22:57:00

6 ответов


31

Если вы посмотрите исходный код get_the_archive_title () , вы увидит, что есть предоставленный фильтр, называемый get_the_archive_title , через который вы можете отфильтровать вывод из функции.

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

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

    if (is_category ()) {

        $ title = single_cat_title ('', false);

    }

    return $ title;

});
 
ответил Pieter Goosen 25 Jam1000000amSun, 25 Jan 2015 06:36:02 +030015 2015, 06:36:02
25

Принятый ответ работает, чтобы удалить префикс Category: из заголовков категорий, но не для других таксономии или типов сообщений. Чтобы исключить другие префиксы, есть два варианта:

  1. Восстановите заголовок для всех вариантов, используемых в исходной функции get_the_archive_title () :

      //Возвращает альтернативный заголовок без префикса для каждого типа, используемого в 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 (). '& Л; /& продолжительность GT;';
        } elseif (is_year ()) {
            $ title = get_the_date (_x ('Y', 'year year archives date format'));
        } elseif (is_month ()) {
            $ title = get_the_date (_x ('F Y', 'формат даты в формате месяца в месяц));
        } elseif (is_day ()) {
            $ title = get_the_date (_x ('F j, Y', 'ежедневный формат даты архивов'));
        } elseif (is_tax ('post_format')) {
            if (is_tax ('post_format', 'post-format-aside')) {
                $ title = _x ('Asides', 'title format archive title');
            } elseif (is_tax ('post_format', 'post-format-gallery')) {
                $ title = _x ('Галереи', 'title format archive title');
            } elseif (is_tax ('post_format', 'post-format-image')) {
                $ title = _x ('Images', 'title format archive title');
            } elseif (is_tax ('post_format', 'post-format-video')) {
                $ title = _x ('Videos', 'title format archive title');
            } elseif (is_tax ('post_format', 'post-format-quote')) {
                $ title = _x ('Quotes', 'title format archive title');
            } elseif (is_tax ('post_format', 'post-format-link')) {
                $ title = _x ('Links', 'title format archive title');
            } elseif (is_tax ('post_format', 'post-format-status')) {
                $ title = _x ('Statuses', 'title format archive title');
            } elseif (is_tax ('post_format', 'post-format-audio')) {
                $ title = _x ('Audio', 'title format archive title');
            } elseif (is_tax ('post_format', 'post-format-chat')) {
                $ title = _x ('Chats', 'title format archive title');
            }
        } elseif (is_post_type_archive ()) {
            $ title = post_type_archive_title ('', false);
        } elseif (is_tax ()) {
            $ title = single_term_title ('', false);
        } else {
            $ title = __ ('Архивы');
        }
        return $ title;
    });
     
  2. Или просто разделите все, что похоже на префикс заголовка (который может изменять фактические заголовки, содержащие слово, за которым следует символ двоеточия):

      //Просто удалите все, что похоже на префикс заголовка архива («Архив:», «Foo:», «Bar:»).
    add_filter ('get_the_archive_title', function ($ title) {
        return preg_replace ('/^ \ w +: /', '', $ title);
    });
     
ответил Quinn Comendant 27 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 27 Sep 2015 21:49:41 +0300 2015, 21:49:41
6

Вы можете использовать

  echo '<h1 class = "page-title">' , single_cat_title ('', false). '& Л; /h1 & GT;';
 
ответил Andrei Gheorghiu 25 Jam1000000amSun, 25 Jan 2015 05:23:25 +030015 2015, 05:23:25
6

Другой вариант:

  & lt;? php echo str_replace ('Бренд:', '', get_the_archive_title ()); ? & GT;
 

Замените бренд: любой текст, который вы хотите избавиться.

Его стоит посмотреть на разницу между get_the_archive_title () и the_archive_title () the_archive_title () возвращает массив get_the_archive_title () возвращает строку

ответил rhysclay 25 J0000006Europe/Moscow 2015, 07:18:44
0

Ben Gillbanks имеет приятное решение , который обрабатывает все типы сообщений и таксономии:

  function hap_hide_the_archive_title ($ title) {
//Пропускаем, если сайт не LTR, это визуально, не работает.
//Должен пытаться выработать элегантное решение, которое работает в обоих направлениях.
if (is_rtl ()) {
    return $ title;
}
//Разделим заголовок на части, чтобы мы могли обернуть их пробелами.
$ title_parts = explode (':', $ title, 2);
//Приклейте его снова вместе.
if (! empty ($ title_parts [1])) {
    $ title = wp_kses (
        $ title_parts [1],
        массив (
            'span' => массив (
                'class' => Массив (),
            ),
        )
    );
    $ title = '<span class = "screen-reader-text">' , esc_html ($ title_parts [0]). ': </span>' , $ Название;
}
return $ title;
}
add_filter ('get_the_archive_title', 'hap_hide_the_archive_title');
 
ответил Dan Knauss 27 Jam1000000amSat, 27 Jan 2018 08:52:53 +030018 2018, 08:52:53
0

Вы можете использовать post_type_archive_title () , чтобы получить заголовок архива без текста «Архивы:».

ответил Mark Williams 17 PMpTue, 17 Apr 2018 18:23:39 +030023Tuesday 2018, 18:23:39

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132