Làm cách nào để tùy chỉnh the_archive_title ()?


40

Trong chủ đề con tôi archive.php, tôi có đoạn mã sau để hiển thị tiêu đề của các trang lưu trữ của mình:

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

Nhưng điều đó sẽ hiển thị các tiêu đề của tôi dưới dạng "Danh mục: Tiêu đề Danh mục " thay vì chỉ đơn giản là tiêu đề mà không có "Danh mục:" được đặt trước.

Bản năng đầu tiên của tôi là ghi đè get_the_archive_title()từ wp-includes/general-template. Nhưng từ những gì tôi đã đọc, rõ ràng tôi không nên thay đổi nội dung cốt lõi của wordpress, ngay cả với phần ghi đè từ một chủ đề con.

Vì vậy, cách thực hành tốt nhất để kiểm soát đầu ra là the_archive_title()gì?


Gửi giải pháp của bạn như là một câu trả lời riêng biệt. Bạn cũng có thể không chấp nhận của tôi và chấp nhận của riêng bạn nếu bạn muốn :-)
Pieter Goosen

Rất tiếc, tôi nghĩ rằng tôi đã xóa chỉnh sửa này. Phương pháp của bạn đã trở nên tốt hơn, vì vậy tôi có nghĩa là xóa của tôi. Tôi sẽ làm điều đó bây giờ.
fildred13

Câu trả lời:


40

Nếu bạn nhìn vào mã nguồn củaget_the_archive_title() , bạn sẽ thấy rằng có một bộ lọc được cung cấp, được gọi get_the_archive_title, thông qua đó bạn có thể lọc đầu ra từ hàm.

Bạn có thể sử dụng cách sau để thay đổi đầu ra trên trang danh mục

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

    if( is_category() ) {

        $title = single_cat_title( '', false );

    }

    return $title;

});

6
Điều này không hoạt động trên một trang lưu trữ với tiêu đề Archive: Books(trong đó Bookslà một loại bài đăng tùy chỉnh). Các single_cat_title()chức năng chỉ trả về một tiêu đề trang nếu loại là một loại hoặc thẻ . Bạn có thể sửa đổi câu trả lời của mình để bao gồm một giải pháp hoạt động với tất cả các loại nội dung không?
Quinn Comendant

@QuinnComendant Hãy xem mã nguồn, dòng 1239 và 1240 :-). Nếu bạn có một vấn đề, chỉ cần đặt một câu hỏi mới cụ thể cho câu hỏi của bạn
Pieter Goosen

1
Đúng, người ta phải trả lại một tiêu đề thay thế cho mỗi loại phân loại hoặc loại bài đăng mà họ muốn các tiêu đề khác nhau. Tôi đã đăng một câu trả lời loại trừ tiền tố từ tất cả các loại.
Quinn Comendant

28

Câu trả lời được chấp nhận hoạt động để loại bỏ Category:tiền tố khỏi tiêu đề lưu trữ danh mục, nhưng không phải loại phân loại hoặc loại bài đăng khác. Để loại trừ các tiền tố khác, có hai tùy chọn:

  1. Xây dựng lại tiêu đề cho tất cả các biến thể được sử dụng trong get_the_archive_title()chức năng ban đầu :

    // 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. Hoặc, chỉ cần loại bỏ bất cứ thứ gì trông giống như một tiền tố tiêu đề (có thể thay đổi các tiêu đề thực tế có chứa một từ được theo sau bởi ký tự dấu hai chấm):

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

Bạn đã có thể sử dụng

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

Điều này không hoạt động trên một trang lưu trữ với tiêu đề Lưu trữ: Sách (trong đó Sách là loại bài đăng tùy chỉnh).
chàng người Brazil đó

@ThatBrazilianGuy single_cat_titlesử dụng single_term_titlenội bộ, cũng hoạt động trên các nguyên tắc phân loại. Đảm bảo chủ đề của bạn không có một trong các mẫu sau được xác định: taxonomy-book.phphoặc taxonomy.php, bởi vì chúng có quyền ưu tiên hơn archive.php. Ngoài ra, hãy xem xét thử nghiệm bất kỳ phương pháp nào trong các câu trả lời khác. Câu trả lời này khá cũ, nó hoạt động tốt vào thời điểm tôi đăng nó, nhưng tôi không phát triển cho WordPress nữa.
Andrei Gheorghiu

6

Một lựa chọn khác là:

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

Thay thế thương hiệu: với bất kỳ văn bản nào bạn muốn loại bỏ.

Giá trị của nó nhìn vào sự khác biệt giữa get_the_archive_title () và the_archive_title () the_archive_title () trả về một mảng get_the_archive_title () trả về một chuỗi


the_archive_title () lặp lại tiêu đề và get_the_archive_title () thì không, vì vậy về cơ bản chúng giống nhau. Nếu bạn cần thay đổi nội dung thì bạn sẽ sử dụng get.
Robert Went

1

Ben Gillbanks có một giải pháp tốt đẹp xử lý tất cả các loại bài và phân loại:

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

Bạn có thể sử dụng post_type_archive_title()để lấy tiêu đề của kho lưu trữ mà không cần văn bản "Lưu trữ:".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.