the_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()何ですか?


別の回答としてソリューションを投稿してください。必要に応じて、私のものを受け入れず、自分のものを受け入れることもできます:
ピーターグーセン

この編集を削除したと思います。あなたの方法はより良くなったので、私は私のものを削除するつもりでした。今からやるよ。
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: BooksBooksカスタム投稿タイプ)のアーカイブページでは機能しません。このsingle_cat_title()関数は、タイプがカテゴリまたはタグの場合にのみページタイトルを返します。すべてのコンテンツタイプで機能するソリューションを含めるように回答を修正できますか?
クインコメンダント

@QuinnComendantソースコードの行1239および1240を見てください:-)。問題がある場合は、質問に固有の新しい質問を質問してください
Pieter Goosen

1
正しいタイトルが必要な分類法または投稿タイプごとに代替タイトルを返す必要があります。すべてのタイプからプレフィックスを除外する回答を投稿しました。
クインコメンダント

28

受け入れられた回答はCategory:、カテゴリアーカイブタイトルからプレフィックスを削除するように機能しますが、他の分類法または投稿タイプは削除しません。他のプレフィックスを除外するには、2つのオプションがあります。

  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のアーカイブページでは機能しません(Booksはカスタム投稿タイプです)。
そのブラジル人の男

@ThatBrazilianGuy single_cat_titlesingle_term_title内部的に使用しますが、これは分類法でも機能します。:必ずお使いのテーマが定義され、以下のいずれかのテンプレートを持っていないことを確認してくださいtaxonomy-book.phpか、taxonomy.php彼らはよりも優先を持っているので、archive.php。また、他の回答のメソッドをテストすることを検討してください。この回答はかなり古いもので、投稿した時点ではうまく機能していましたが、WordPress向けの開発はもうしていません。
アンドレイゲオルギウ

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を使用します。
ロバートウェント

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.