_archive_title ()을 사용자 정의하는 방법은 무엇입니까?


40

내 하위 테마에서 archive.php아카이브 페이지의 제목을 표시하는 다음 코드가 있습니다.

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

그러나 제목 앞에 "Category :"가없는 제목 대신 제목이 "Category : Category Title " 로 표시됩니다 .

나의 첫 번째 본능은에서 재정의 get_the_archive_title()하는 것이 었습니다 wp-includes/general-template. 그러나 내가 읽은 것에서 분명히 자식 테마에서 재정의하더라도 워드 프레스 핵심 요소를 변경해서는 안됩니다.

그렇다면 출력을 제어하는 ​​가장 좋은 방법은 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()함수는 유형이 category 또는 tag 인 경우에만 페이지 제목을 반환합니다 . 모든 컨텐츠 유형에서 작동하는 솔루션을 포함하도록 답변을 수정할 수 있습니까?
Quinn Comendant

@QuinnComendant 소스 코드, 1239 행과 1240 행 :-)을보십시오. 문제가있는 경우 간단히 질문과 관련된 새로운 질문을하십시오
Pieter Goosen

1
그렇습니다. 각 분류 체계 또는 다른 제목을 원하는 게시물 유형에 대한 대체 제목을 반환해야합니다. 모든 유형의 접두사를 제외하는 답변을 게시했습니다.
Quinn Comendant

28

허용 된 답변은 Category:카테고리 아카이브 제목에서 접두사 를 제거 하지만 다른 분류 또는 게시물 유형은 제거 하지 않습니다. 다른 접두사를 제외하려면 두 가지 옵션이 있습니다.

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

제목이 Archive : Books (책은 사용자 정의 게시물 유형) 인 보관 페이지에서는 작동하지 않습니다.
그 브라질 사람

@ThatBrazilianGuy single_cat_titlesingle_term_title내부적으로 사용 하며 분류법에서도 작동합니다. : 있는지 확인 주제는 정의 된 다음 템플릿 중 하나를 가지고 있지 않습니다 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 ()은 그렇지 않으므로 기본적으로 동일합니다. 내용을 변경 해야하는 경우 get을 사용하십시오.
Robert Went 's

1

Ben Gillbanks 모든 게시물 유형 및 분류법을 처리 하는 훌륭한 솔루션 을 제공합니다.

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()"아카이브 :"텍스트없이 아카이브 제목을 얻는 데 사용할 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.