Як налаштувати the_archive_title ()?


40

У моїх дочірніх темах у archive.phpмене є такий код для відображення заголовка моїх архівних сторінок:

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

Але це відображає мої назви як "Категорія: Назва категорії ", а не просто заголовок без попереднього "Категорія:".

Мій перший інстинкт повинен був скасувати get_the_archive_title()з wp-includes/general-template. Але з того, що я прочитав, мабуть, я ніколи не повинен змінювати основні речі WordPress, навіть із відмінками від дитячої теми.

То який найкращий спосіб контролювати вихід the_archive_title()?


Розмістіть своє рішення як окрему відповідь. Ви також можете прийняти моє та прийняти своє, якщо хочете :-)
Пітер Гусен

На жаль, я подумав, що видалив цю зміну Ваш метод закінчився кращим, тому я мав на увазі видалити шахту. Я зараз це зроблю.
fildred13

Відповіді:


40

Якщо ви подивитесь на вихідний код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;

});

6
Це не працює на сторінці архіву з заголовком Archive: Books(де Booksє типова публікація). single_cat_title()Функція повертає тільки заголовок сторінки , якщо типу є категорією або тег . Чи можете ви змінити свою відповідь, щоб включити рішення, яке працює з усіма типами вмісту?
Квінн Комендант

@QuinnComendant Подивіться на вихідний код, рядки 1239 та 1240 :-). Якщо у вас є проблеми, просто задайте нове питання, характерне для вашого питання
Pieter Goosen

1
Правильно, потрібно повернути альтернативну назву для кожної таксономії чи типу публікації, для якої вони хочуть різних назв. Я опублікував відповідь, яка виключає префікси всіх типів.
Квінн Комендант

28

Прийнята відповідь працює на видалення Category:префікса з назв архіву категорій, але не з інших таксономій чи типів публікацій. Щоб виключити інші префікси, є два варіанти:

  1. Перебудуйте заголовок для всіх варіантів, використовуваних у вихідній get_the_archive_title()функції:

    // Return an alternate title, without prefix, for every type used in the 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_year() ) {
            $title = get_the_date( _x( 'Y', 'yearly archives date format' ) );
        } elseif ( is_month() ) {
            $title = get_the_date( _x( 'F Y', 'monthly archives date format' ) );
        } elseif ( is_day() ) {
            $title = get_the_date( _x( 'F j, Y', 'daily archives date format' ) );
        } elseif ( is_tax( 'post_format' ) ) {
            if ( is_tax( 'post_format', 'post-format-aside' ) ) {
                $title = _x( 'Asides', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-gallery' ) ) {
                $title = _x( 'Galleries', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-image' ) ) {
                $title = _x( 'Images', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-video' ) ) {
                $title = _x( 'Videos', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-quote' ) ) {
                $title = _x( 'Quotes', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-link' ) ) {
                $title = _x( 'Links', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-status' ) ) {
                $title = _x( 'Statuses', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-audio' ) ) {
                $title = _x( 'Audio', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-chat' ) ) {
                $title = _x( 'Chats', 'post format archive title' );
            }
        } elseif ( is_post_type_archive() ) {
            $title = post_type_archive_title( '', false );
        } elseif ( is_tax() ) {
            $title = single_term_title( '', false );
        } else {
            $title = __( 'Archives' );
        }
        return $title;
    });
    
  2. Або просто зніміть все, що схоже на префікс заголовка (що може змінити фактичні заголовки, що містять слово, за яким слідує двокрапка):

    // Simply remove anything that looks like an archive title prefix ("Archive:", "Foo:", "Bar:").
    add_filter('get_the_archive_title', function ($title) {
        return preg_replace('/^\w+: /', '', $title);
    });
    

6

Ви можете використовувати

echo '<h1 class="page-title">' . single_cat_title( '', false ) . '</h1>';

Це не працює на сторінці архіву з назвою Архів: Книги (де Книги - це спеціальний тип публікації).
Той бразильський хлопець

@ThatBrazilianGuy single_cat_titleвикористовує single_term_titleвнутрішнє, що працює і над таксономіями. Переконайтеся, що у вашій темі не визначено жодного з таких шаблонів: taxonomy-book.phpабо taxonomy.php, оскільки вони мають перевагу над archive.php. Також розглянемо тестування будь-якого з методів в інших відповідях. Ця відповідь досить стара, вона працювала чудово в той час, коли я її розмістила, але я вже не розвиваюся для WordPress.
Андрій Георгіу

6

Ще один варіант:

<?php echo str_replace('Brand: ','',get_the_archive_title()); ?>

Замініть бренд: будь-яким текстом, який ви хочете позбутися.

Варто розглянути різницю між get_the_archive_title () та the_archive_title () the_archive_title () повертає масив get_the_archive_title () повертає рядок


the_archive_title () повторює заголовок, а get_the_archive_title () - ні, тому вони в основному однакові. Якщо вам потрібно змінити вміст, ви використовуєте get.
Роберт Пішов

1

Ben Gillbanks має приємне рішення, яке обробляє всі типи та таксономії:

function hap_hide_the_archive_title( $title ) {
// Skip if the site isn't LTR, this is visual, not functional.
// Should try to work out an elegant solution that works for both directions.
if ( is_rtl() ) {
    return $title;
}
// Split the title into parts so we can wrap them with spans.
$title_parts = explode( ': ', $title, 2 );
// Glue it back together again.
if ( ! empty( $title_parts[1] ) ) {
    $title = wp_kses(
        $title_parts[1],
        array(
            'span' => array(
                'class' => array(),
            ),
        )
    );
    $title = '<span class="screen-reader-text">' . esc_html( $title_parts[0] ) . ': </span>' . $title;
}
return $title;
}
add_filter( 'get_the_archive_title', 'hap_hide_the_archive_title' );

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.