วิธีกำหนด the_archive_title () เอง


40

ในธีมลูกของarchive.phpฉันฉันมีรหัสต่อไปนี้สำหรับการแสดงชื่อของหน้าเก็บถาวรของฉัน:

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

แต่นั่นแสดงชื่อของฉันเป็น "หมวดหมู่: ชื่อหมวดหมู่ " แทนที่จะเป็นเพียงแค่ชื่อโดยไม่มี "หมวดหมู่:" ที่ได้รับการเติมไว้ล่วงหน้า

สัญชาตญาณแรกของฉันคือการแทนที่จากget_the_archive_title() wp-includes/general-templateแต่จากสิ่งที่ฉันอ่านดูเหมือนว่าฉันไม่ควรเปลี่ยน wordpress core ทุกอย่างแม้แต่กับการแทนที่จากธีมลูก

ดังนั้นวิธีปฏิบัติที่ดีที่สุดในการควบคุมผลลัพธ์ของthe_archive_title()คืออะไร


โพสต์โซลูชันของคุณเป็นคำตอบแยกต่างหาก นอกจากนี้คุณยังสามารถยอมรับการยอมรับและยอมรับของคุณเองได้หากคุณต้องการ :-)
Pieter Goosen

โอ๊ะฉันคิดว่าฉันลบการแก้ไขนี้ วิธีการของคุณจบลงด้วยดีกว่าฉันเลยตั้งใจลบของฉัน ฉันจะทำตอนนี้
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()ฟังก์ชั่นส่งกลับเฉพาะชื่อหน้าถ้าประเภทเป็นหมวดหมู่หรือแท็ก คุณสามารถแก้ไขคำตอบเพื่อรวมโซลูชันที่ทำงานกับเนื้อหาทุกประเภทได้หรือไม่
Quinn Comendant

@QuinnComendant ดูซอร์สโค้ดบรรทัด 1239 และ 1240 :-) หากคุณมีปัญหาให้ถามคำถามใหม่โดยเฉพาะกับคำถามของคุณ
Pieter Goosen

1
ขวาหนึ่งจะต้องส่งคืนชื่อสำรองสำหรับอนุกรมวิธานหรือโพสต์แต่ละประเภทที่พวกเขาต้องการชื่อที่แตกต่างกัน ฉันโพสต์คำตอบที่ไม่รวมคำนำหน้าจากทุกประเภท
Quinn Comendant

28

คำตอบที่ได้รับการยอมรับนั้นใช้เพื่อลบCategory:คำนำหน้าออกจากชื่อหมวดหมู่การเก็บถาวร แต่ไม่ใช่ taxonomy หรือประเภทการโพสต์อื่น ๆ หากต้องการยกเว้นส่วนนำหน้าอื่น ๆ มีสองตัวเลือกดังนี้

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

สิ่งนี้ไม่ทำงานในหน้าเก็บถาวรที่มีชื่อเรื่องของไฟล์เก็บถาวร: หนังสือ (โดยที่ Books เป็นประเภทโพสต์ที่กำหนดเอง)
Guy ชาวบราซิลนั่น

@ThatBrazilianGuy single_cat_titleใช้single_term_titleภายในซึ่งทำงานกับ taxonomies เช่นกัน ตรวจสอบให้แน่ใจธีมของคุณไม่ได้มีอย่างใดอย่างหนึ่งดังต่อไปนี้แม่แบบที่กำหนดไว้: taxonomy-book.phpหรือtaxonomy.phpเพราะพวกเขามี precendence archive.phpมากกว่า ลองพิจารณาทดสอบวิธีการใด ๆ ในคำตอบอื่น ๆ คำตอบนี้ค่อนข้างเก่ามันทำงานได้ดีในเวลาที่ฉันโพสต์ แต่ฉันไม่ได้พัฒนา WordPress อีกต่อไป
Andrei Gheorghiu

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 () ไม่ได้ดังนั้นพวกเขาจึงเหมือนกัน หากคุณต้องการแก้ไขเนื้อหาคุณจะต้องได้รับ
Robert Went

1

Ben Gillbanks มีทางออกที่ดีที่จัดการโพสต์และ taxonomies ทั้งหมด:

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.