the_archive_title()をカスタマイズする方法は?
-
-
別の回答としてソリューションを投稿してください.必要に応じて、私のものを受け入れず、自分のものを受け入れることもできます:-)Post your solution as a separate answer. You can also unaccept mine and accept your own if you wish :-)
- 0
- 2015-01-27
- Pieter Goosen
-
おっと、私はこの編集を削除したと思いました.あなたの方法は結局より良くなったので、私は私のものを削除するつもりでした.今からやります.Oops, I thought I deleted this edit. Your method ended up being better, so I meant to delete mine. I'll do that now.
- 0
- 2015-01-27
- fildred13
-
6 回答
- 投票
-
- 2015-01-25
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; });
If you look at the source code of
get_the_archive_title()
, you will see that there is a filter supplied, calledget_the_archive_title
, through which you can filter the output from the function.You can use the following to change the output on a category page
add_filter( 'get_the_archive_title', function ( $title ) { if( is_category() ) { $title = single_cat_title( '', false ); } return $title; });
-
これは、タイトルが「Archive:Books」のアーカイブページでは機能しません(「Books」はカスタム投稿タイプです).`single_cat_title()`関数は、タイプが* category *または*tag *の場合にのみページタイトルを返します.すべてのコンテンツタイプで機能するソリューションを含めるように回答を修正できますか?This doesn't work on an archive page with a title of `Archive: Books` (where `Books` is a custom post type). The `single_cat_title()` function only returns a page title if the type is a *category* or *tag*. Can you amend your answer to include a solution that works with all content types?
- 6
- 2015-09-25
- Quinn Comendant
-
@QuinnComendantソースコードの1239行目と1240行目を見てください:-).問題がある場合は、質問に固有の新しい質問をするだけです.@QuinnComendant Look at the source code, lines 1239 and 1240 :-). If you have an issue, simply ask a new question specific to your question
- 0
- 2015-09-25
- Pieter Goosen
-
そうです、異なるタイトルが必要な分類法または投稿タイプごとに代替タイトルを返す必要があります.すべてのタイプからプレフィックスを除外する回答を投稿しました.Right, one must return an alternate title for each taxonomy or post type they want different titles for. I've posted an answer that excludes prefixes from all types.
- 1
- 2015-09-27
- Quinn Comendant
-
- 2015-09-27
承認された回答は、カテゴリアーカイブタイトルから
Category:
プレフィックスを削除するように機能しますが、他の分類法や投稿タイプは削除しません.他のプレフィックスを除外するには、次の2つのオプションがあります.-
元の
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; });
-
または、タイトルプレフィックスのように見えるものをすべて削除します(単語の後にコロン文字が続く実際のタイトルを変更する可能性があります):
// 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); });
The accepted answer works to remove the
Category:
prefix from category archive titles, but not other taxonomy or post types. To exclude other prefixes, there are two options:Rebuild the title for all the variants used in the original
get_the_archive_title()
function:// 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; });
Or, simply strip anything that looks like a title prefix (which may alter actual titles which contain a word followed by the colon character):
// 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); });
-
`linktype:tv`のようなスペースを含むタイトルの場合、正規表現は`/^(\ w| \ s)+:/`である必要がありますFor titles containing spaces like `link type: tv` the regex must be `/^(\w|\s)+: /`
- 0
- 2020-04-19
- aitor
-
-
これは、Archive:Booksというタイトルのアーカイブページでは機能しません(Booksはカスタム投稿タイプです).This doesn't work on an archive page with a title of Archive: Books (where Books is a custom post type).
- 0
- 2017-04-26
- That Brazilian Guy
-
@ThatBrazilianGuy [`single_cat_title`](https://developer.wordpress.org/reference/functions/single_cat_title/)は、内部で` single_term_title`を使用します.これは、分類法でも機能します.テーマには、 `archive.php`よりも優先されるため、`taxonomy-book.php`または `taxonomy.php`のいずれかのテンプレートが定義されていないことを確認してください.また、他の回答のメソッドのいずれかをテストすることを検討してください.この回答はかなり古く、投稿した時点では正常に機能していましたが、WordPress用に開発していません.@ThatBrazilianGuy [`single_cat_title`](https://developer.wordpress.org/reference/functions/single_cat_title/) uses `single_term_title` internally, which works on taxonomies as well. Make sure your theme doesn't have one of the following templates defined: `taxonomy-book.php` or `taxonomy.php`, because they have precendence over `archive.php`. Also, consider testing any of the methods in the other answers. This answer is quite old, it was working fine at the time I posted it, but I'm not developing for WordPress anymore.
- 0
- 2017-04-26
- tao
-
-
- 2015-06-25
別のオプションは次のとおりです:
<?php echo str_replace('Brand: ','',get_the_archive_title()); ?>
ブランドを置き換える:削除したいテキストに置き換えます.
get_the_archive_title()とthe_archive_title()の違いを調べる価値があります the_archive_title()は配列を返します get_the_archive_title()は文字列を返します
Another option is:
<?php echo str_replace('Brand: ','',get_the_archive_title()); ?>
Replace Brand: with whatever text you are wanting to get rid of.
Its worth looking into the difference between get_the_archive_title() and the_archive_title() the_archive_title() returns an array get_the_archive_title() returns a string
-
the_archive_title()はタイトルをエコーし、get_the_archive_title()はエコーしないため、基本的に同じです.コンテンツを変更する必要がある場合は、getを使用します.the_archive_title() echoes the title and get_the_archive_title() does not, so they are basically the same. If you need to alter the content then you would use get.
- 1
- 2018-08-19
- Robert Went
-
- 2018-01-27
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' );
Ben Gillbanks has a nice solution that handles all post types and 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' );
-
- 2018-04-17
post_type_archive_title()
を使用して、「Archives:」テキストなしでアーカイブのタイトルを取得できます.You can use
post_type_archive_title()
to get the title of an archive without the "Archives:" text.
子テーマの
archive.php
には、アーカイブページのタイトルを表示するための次のコードがあります.ただし、タイトルに「Category:」が付加されていないタイトルではなく、「Category: Category Title 」と表示されます.
私の最初の本能は、
wp-includes/general-template
からwp-includes/general-template
をオーバーライドすることでした.しかし、私が読んだことから、子テーマからのオーバーライドがあっても、WordPressのコアなものを変更することはないようです.では、
the_archive_title()
の出力を制御するためのベストプラクティスの方法は何ですか?