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.