Aki Hamano様、返信ありがとうございます。
・1点目 親テーマから何のファイルをコピー
親テーマの直下にあるファイルと「template-parts」フォルダ全般です。その中でこちらで作るサイトに合わせてhtml部分をカスタマイズしています。
・2点目 どのようなコードを試したのか
恐れ入りますが、その時点のソースがなくなってしまっているので正確な詳細については記載できません。
こんな感じで追記したような・・・
function new_excerpt_more($more){
global $post;
return ‘…<a href=”‘. get_permalink($post->ID) . ‘”>くわしくみる!</a>’;
}
add_filter(‘excerpt_more’,’new_excerpt_more’,9999);
あいまいで申し訳ありませんが、ご教授お願い致します。
確認してみましたが、以下の手順で問題なく変更できました。
twentytwentyone-child
ディレクトリを作成
- 作ったディレクトリの中に
style.css
を作成し、以下のように記述
/*
Theme Name: Twenty Twenty-One-child
Template: twentytwentyone
*/
- 作ったディレクトリの中に
functions.php
を作成し、以下のように記述
<?php
function twenty_twenty_one_child_excerpt_more() {
return '… <a href="' . esc_url( get_permalink() ) . '">詳しく見る</a>';
}
add_filter( 'excerpt_more', 'twenty_twenty_one_child_excerpt_more', 20 );
- 子テーマを有効化
まずは上記手順で変更できることを確認した後に、親テーマから必要なファイルを子テーマに追加・カスタマイズしていけば、どこで問題が発生するのかを特定できると思います。
Aki Hamano様、返信ありがとうございます。
全く同じ構成で確認しましたところ、残念ながら期待通り反映されませんでした。
子テーマ内には指定されたコードの記載している「style.css」と「functions.php」のみです。
こちらの環境はローカルxamppでphp最新バージョン(8.2.12)です。
現状、親テーマ内の「inc」フォルダ内のtemplate-functions.phpを直接触るしか変更できません。
わかる範囲でご教授頂けましたら幸いです。
確認ですが、一覧ページ(アーカイブページ)で、各投稿のコンテンツ抜粋の後に表示される「続きを読む」というテキストを変更したい、ということで合っていますか?
また、提案した関数の中(return文の前)でecho 'test';
などを追加してページをリロードしたときに、という文字列はページに表示されますか?これは、その関数が本当に実行されているかどうかをテストするためです。
Aki Hamano様
画像つきで説明頂きありがとうございます。
投稿記事を追加する際の「続きをよむ」のリンクテキストで間違いございません。
また、提案した関数の中(return文の前)でecho 'test'; などを追加してページをリロードしたときに、という文字列はページに表示されますか?これは、その関数が本当に実行されているかどうかをテストするためです。
「echo ‘test’;」を追加すると、表示されました。しかしindex.phpやarchive.phpなどで分岐のある記述「content-excerpt.php」に遷移する箇所を「content.php」に変更して続きをよむボタンを表示させると「echo ‘test’;」も表示されなくなります(どちらにせよ続きをよむ文字は変更できない状態です)。
回答は急いでいませんので、よろしくお願い致します。
しかしindex.phpやarchive.phpなどで分岐のある記述「content-excerpt.php」に遷移する箇所を「content.php」に変更して続きをよむボタンを表示させると「echo ‘test’;」も表示されなくなります
index.php や archive.php を子テーマにコピーして、以下の記述をカスタマイズしているということでしょうか?
get_template_part( 'template-parts/content/content', get_theme_mod( 'display_excerpt_or_full_post', 'excerpt' ) );
もしそうであれば、どのようにカスタマイズされたのかを教えてください。
Aki Hamano様
返信遅くなりました。
index.php や archive.php を子テーマにコピーして、以下の記述をカスタマイズしているということでしょうか?
get_template_part( 'template-parts/content/content', get_theme_mod( 'display_excerpt_or_full_post', 'excerpt' ) );
もしそうであれば、どのようにカスタマイズされたのかを教えてください。
→カスタマイズというよりは分岐先の「, get_theme_mod( ‘display_excerpt_or_full_post’, ‘excerpt’ )」を削除して、「template-parts/content/content」に遷移させている形となります。
カスタマイズというよりは分岐先の「, get_theme_mod( ‘display_excerpt_or_full_post’, ‘excerpt’ )」を削除して、「template-parts/content/content」に遷移させている形となります。
ということは、index.php
や archive.php
を子テーマにコピーして、
get_template_part( 'template-parts/content/content', get_theme_mod( 'display_excerpt_or_full_post', 'excerpt' ) );
という記述を
<?php get_template_part( 'template-parts/content/content' ); ?>
に変更しているということで間違いないでしょうか。
このように変更した場合、template-parts/content/content.php
がロードされることになりますが、こちらでテストした限りでは「続きを読む」テキストは表示されずコンテンツが全文表示されてしまいます。
content.php
自体をカスタマイズされていないでしょうか。
Aki Hamano様
content.php
自体をカスタマイズされていないでしょうか。
通常通り投稿画面から「続きをよむ」ブロックを挿入しています。表示されないのはブロック追加していないためでしょうか。
content.php自体はなにもカスタマイズしていません(親テーマの物をそのままコピーして持っているだけです)。
長らくご対応頂きありがとうございます。こちらの質問に無理があれば、わかる範囲で結構ですのでよろしくお願い致します。
こんにちは、横から失礼お許しください。
やり取りを拝見していてコメントしておくべきかなと感じたので失礼します。つまんなければ無視してくださいね
Twenty Twenty Ten テーマは、クラッシックテーマですが、Twenty Seventeen テーマ等のトラディッショナル?クラッシックテーマとは表示の仕方が大きく異なる設計で作られています。
なので、フィルターのかかり具合や、ブロックエディタの機能も異なります。以下はmoreブロックを含む投稿の例です。
twenty seventeen
全然表示が異なりますね
翻訳文字列は、2017テーマは、続く になっていて、2021テーマは 続きを読む ですね
投稿のmoreブロックは「続きを読む」を「続く」に変更しています。2017はフロントに反映しますが、2021は反映しません。
ようやく文字列の長さも異なります。2017は長く、2021は短い
2021テーマで、moreブロック以前に長めの文字列などがあると、フロントでは表示できない。
どっちが間違っているとかいうつもりはなく利用者の目的に合えばいいだけと思いますが、フィルターなどのカスタマイズを行うユーザーの場合は、それらのテーマがどのように作られているか知っていないと、後々開発に支障をきたす可能性が高いと思います。
というわけで、オーバースペックですが、私が、トラディッショナルクラッシック側に寄せてみた実験結果をお知らせします。
child theme functions.php
変な関数名ですけど御免
<?php
add_filter( 'gettext', 'change_post_to_article' );
function change_post_to_article( $translated ) {
$default_translated_more_link_text = '続きを読む %s';
$override_translated_more_link_text = '詳しく見る %s';
if ( $default_translated_more_link_text === $translated ) {
$post = get_post( get_the_ID() );
$content = $post->post_content;
$custom_link_text = wp_kses( get_extended( $content )['more_text'], array() ) . ' %s';
$custom_link_text = empty( $custom_link_text ) ? $override_translated_more_link_text : $custom_link_text;
return $custom_link_text;
}
return $translated;
}
//the_excerptを使うか、the_contents() かでフィルターも異なるかも、、、
function twenty_twenty_one_child_excerpt_more() {
return '<p>… <a href="' . esc_url( get_permalink() ) . '">詳しく見る!!!</a></p>';
}
//add_filter( 'excerpt_more', 'twenty_twenty_one_child_excerpt_more', 20 );
//add_filter( 'the_content_more_link', 'twenty_twenty_one_child_excerpt_more', 20 );
child theme template-parts/exxcerpt/excerpt.php
<?php
/**
* Extend Show the excerpt.
* 概要文は、含んでないです
*/
$post = get_post( get_the_ID() );
$content = $post->post_content;
if ( false === strstr($content,'<!--more') ) {
the_excerpt();
} else {
the_content();
}
と、頑張ってみたんだけど 間違ってたら「教えてくださいね」
補足
投稿のmoreブロックは「続きを読む」を「続く」に変更しています。2017はフロントに反映しますが、2021は反映しません。
クラッシックでmore text をどのように変更したか書いていなかったので、補足
-------------- 続きを読む -----------------
more ブロックは、上記のように表示されますが、続きを読むにカーソルを合わせて他の文字を入力できるという意味です。 この機能は、クラッシックテーマ用です。
ブロックテーマでは、続きを読むボタンは、サイトエディタの方に移行しているので、投稿単位で、続きを読むボタンが追加されることはないみたいです。
なんとなく状況が分かりました。以下の状況であっていますか?
index.php
や archive.php
を子テーマにコピーして、以下の記述をカスタマイズした
get_template_part( 'template-parts/content/content', get_theme_mod( 'display_excerpt_or_full_post', 'excerpt' ) );
を
get_template_part( 'template-parts/content/content' );
に変更
- このように変更すると、アーカイブページではコンテンツすべてが表示されてしまうので、投稿エディターの中で「続き」ブロックをコンテンツの中に挿入している
- このブロックが出力するテキストを変更したい
もし上記状況で合っていれば、以下のコードで対応できないでしょうか。
function twenty_twenty_one_child_continue_reading_link() {
if ( ! is_admin() ) {
return '<div class="more-link-container"><a class="more-link" href="' . esc_url( get_permalink() ) . '#more-' . esc_attr( get_the_ID() ) . '">詳しく見る</a></div>';
}
}
add_filter( 'the_content_more_link', 'twenty_twenty_one_child_continue_reading_link', 20 );
Aki Hamano様
長らくやり取りして頂きありがとうございました。
上記をfunctions.phpに設定すると表示変更出来ました!
ありがとうございました。早速使わせて頂きます。
また何かありましたらお助け下さい。