The_archive_title () nasıl özelleştirilir?


40

Çocuğumun temalarında archive.php, arşiv sayfalarımın başlığını görüntülemek için aşağıdaki kod var:

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

Ancak bu, başlıklarımı önceden hazırlanmış "Kategori: " olmayan başlığın yerine "Kategori: Kategori Başlığı " olarak görüntüler .

Benim ilk içgüdüsü geçersiz oldu get_the_archive_title()dan wp-includes/general-template. Ama okuduklarımdan, görünüşe göre, bir çocuk teması geçersiz kılmalar olsa bile, hiçbir zaman WordPress'in çekirdek özelliklerini değiştirmemeliyim.

Peki, çıktısını kontrol etmenin en iyi yolu the_archive_title()nedir?


Çözümünüzü ayrı bir cevap olarak gönderin. İsterseniz benimki de kabul etmeyebilir ve kendi
— kararınızı

Hata! Bu düzenlemeyi sildiğimi sanıyordum. Yöntemin daha iyi oldu, bu yüzden benimkini silmek istedim. Bunu şimdi yapacağım.
— fildred13

Yanıtlar:


40

Eğer kaynak kodunaget_the_archive_title() bakarsanız get_the_archive_title, fonksiyondan çıktıyı filtrelendirebileceğiniz ve verilen bir filtre olduğunu göreceksiniz .

Bir kategori sayfasındaki çıktıyı değiştirmek için aşağıdakileri kullanabilirsiniz.

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

    if( is_category() ) {

        $title = single_cat_title( '', false );

    }

    return $title;

});

6
Bu, Archive: Books( Booksözel bir gönderi türü olan) başlığı olan bir arşiv sayfasında çalışmaz . single_cat_title()Tipi bir ise işlevi yalnızca bir sayfa başlığı döndüren kategori veya etiket . Tüm içerik türleriyle çalışan bir çözüm içerecek şekilde cevabınızı değiştirebilir misiniz?
— Quinn Comendant

@QuinnComendant Kaynak koduna bakın, satır 1239 ve 1240 :-). Bir sorunuz varsa, sorunuza özel yeni bir soru sorun
— Pieter Goosen 25.05

1
Doğru, kişi için farklı başlıklar istedikleri her taksonomi ya da posta türü için alternatif bir başlık döndürmeniz gerekir. Tüm türlerin öneklerini hariç tutan bir cevap gönderdim.
— Quinn Comendant

28

Kabul edilen cevap, Category:ön eki kategori arşiv başlıklarından kaldırmak , ancak diğer taksonomi ve posta türlerinden kaldırmak için çalışır . Diğer önekleri hariç tutmak için iki seçenek vardır:

  1. Orijinal get_the_archive_title()işlevde kullanılan tüm değişkenler için başlığı yeniden oluşturun :

    // 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. Veya, başlık öneki gibi görünen her şeyi soyun (iki nokta üst üste karakteri izleyen bir kelimeyi içeren gerçek başlıkları değiştirebilir):

    // 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

Kullanabilirsin

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

Bu, Arşivi: Kitaplar başlığının bulunduğu bir arşiv sayfasında çalışmaz (ki burada Kitaplar özel bir yazı türüdür).
— Brezilyalı Adam

@ThatBrazilianGuy , taksonomilerde de çalışan dahili olarak single_cat_titlekullanır single_term_title. Temanızın tanımlanmış aşağıdaki şablonlardan birine sahip olmadığından emin olun: taxonomy-book.phpveya taxonomy.php, çünkü bunlar önceliklidir archive.php. Ayrıca, diğer cevaplardaki yöntemlerden herhangi birini test edin. Bu cevap oldukça eski, gönderdiğim sırada iyi çalışıyordu, fakat artık WordPress için gelişmiyordum.
— Andrei Gheorghiu

6

Başka bir seçenek:

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

Markayı Değiştir: kurtulmak istediğiniz herhangi bir metinle.

Get_the_archive_title () ve the_archive_title () the_archive_title () arasındaki farka bakmaya değer bir dizi döndürür get_the_archive_title () bir dizge döndürür


the_archive_title (), başlığı tekrarlar ve get_the_archive_title () yapmaz, bu yüzden temelde aynıdırlar. İçeriği değiştirmeniz gerekirse, o zaman get kullanırsınız.
— Robert

1

Ben Gillbanks , tüm post tiplerini ve taksonomileri ele alan hoş bir çözüme sahiptir:

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

0

post_type_archive_title()"Arşiv:" metni olmadan bir arşivin başlığını almak için kullanabilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.