Bagaimana cara menyesuaikan the_archive_title ()?

41

Dalam tema anak saya archive.php, saya memiliki kode berikut untuk menampilkan judul halaman arsip saya:

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

Tapi itu menampilkan judul saya sebagai "Kategori: Judul Kategori " bukan hanya judul tanpa "Kategori:" yang disebutkan sebelumnya.

Insting pertama saya adalah untuk menimpa get_the_archive_title()dari wp-includes/general-template. Tapi dari apa yang saya baca, tampaknya saya tidak seharusnya mengubah hal-hal inti wordpress, bahkan dengan mengabaikan dari tema anak.

Jadi apa cara praktik terbaik untuk mengontrol output the_archive_title()?

fildred13
sumber
Posting solusi Anda sebagai jawaban terpisah. Anda juga dapat menerima milik saya dan menerima milik Anda jika Anda mau :-)
Pieter Goosen
Ups, saya pikir saya menghapus suntingan ini. Metode Anda pada akhirnya menjadi lebih baik, jadi saya bermaksud menghapus metode saya. Saya akan melakukannya sekarang.
fildred13

Jawaban:

40

Jika Anda melihat kode sumberget_the_archive_title() , Anda akan melihat bahwa ada filter yang disediakan, yang disebut get_the_archive_title, di mana Anda dapat memfilter output dari fungsi.

Anda dapat menggunakan yang berikut ini untuk mengubah output pada halaman kategori

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

    if( is_category() ) {

        $title = single_cat_title( '', false );

    }

    return $title;

});
Pieter Goosen
sumber
6
Ini tidak berfungsi pada halaman arsip dengan judul Archive: Books(di mana Booksjenis posting khusus). The single_cat_title()fungsi hanya mengembalikan judul halaman jika jenis adalah kategori atau tag . Bisakah Anda mengubah jawaban Anda untuk memasukkan solusi yang bekerja dengan semua jenis konten?
Quinn Comendant
@QuinnComendant Lihatlah kode sumber, baris 1239 dan 1240 :-). Jika Anda memiliki masalah, tanyakan saja pertanyaan baru yang spesifik untuk pertanyaan Anda
Pieter Goosen
1
Benar, seseorang harus mengembalikan judul alternatif untuk setiap taksonomi atau jenis posting yang mereka inginkan untuk judul yang berbeda. Saya telah memposting jawaban yang mengecualikan awalan dari semua jenis.
Quinn Comendant
28

Jawaban yang diterima berfungsi untuk menghapus Category:awalan dari judul arsip kategori, tetapi bukan jenis taksonomi atau jenis posting lainnya. Untuk mengecualikan awalan lainnya, ada dua opsi:

  1. Buat kembali judul untuk semua varian yang digunakan dalam get_the_archive_title()fungsi asli :

    // 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. Atau, cukup hapus apa pun yang tampak seperti awalan judul (yang dapat mengubah judul aktual yang mengandung kata diikuti oleh karakter titik dua):

    // 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);
    });
Rekomendasi Quinn
sumber
6

Anda bisa menggunakannya

echo '<h1 class="page-title">' . single_cat_title( '', false ) . '</h1>';
Andrei Gheorghiu
sumber
Ini tidak berfungsi pada halaman arsip dengan judul Arsip: Buku (di mana Buku adalah jenis posting khusus).
Pria Brasil
@ThatBrazilianGuy single_cat_titlemenggunakan single_term_titleinternal, yang bekerja pada taksonomi juga. Pastikan tema Anda tidak memiliki salah satu templat berikut yang ditentukan: taxonomy-book.phpatau taxonomy.php, karena sudah lebih dulu didahulukan archive.php. Juga, pertimbangkan untuk menguji salah satu metode di jawaban lain. Jawaban ini cukup lama, itu berfungsi dengan baik pada saat saya mempostingnya, tapi saya tidak mengembangkan untuk WordPress lagi.
Andrei Gheorghiu
6

Pilihan lain adalah:

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

Ganti Merek: dengan teks apa pun yang ingin Anda singkirkan.

Layak untuk melihat perbedaan antara get_the_archive_title () dan the_archive_title () the_archive_title () mengembalikan array get_the_archive_title () mengembalikan sebuah string

Rhysclay
sumber
the_archive_title () menggemakan judul dan get_the_archive_title () tidak, jadi mereka pada dasarnya sama. Jika Anda perlu mengubah konten maka Anda akan menggunakan get.
Robert Went
1

Ben Gillbanks memiliki solusi bagus yang menangani semua jenis pos dan taksonomi:

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' );
Dan Knauss
sumber
0

Anda dapat menggunakan post_type_archive_title()untuk mendapatkan judul arsip tanpa teks "Archives:".

Mark Williams
sumber