• 解決済 de-0612nishio

    (@de-0612nishio)


    親テーマ「twenty_twenty_one」の子テーマとしてサイト制作しています。

    ブロックエディターで吐き出す「続きを読む(more-link)」のテキストを変更しようとしています。

    「twenty_twenty_one」以前の子テーマだとすぐに解決したのですが、このテーマは変更するのに中々できません。

    ひとつわかったのは「inc」フォルダ内にある「template-functions.php」内の以下のソースを直接変更すれば「続きを読む」から違うテキストに変更できました。

    // Filter the excerpt more link.

    add_filter( 'excerpt_more', 'twenty_twenty_one_continue_reading_link_excerpt' );

    /**

     * Creates the continue reading link.

     *

     * @since Twenty Twenty-One 1.0

     */

    function twenty_twenty_one_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() ) . '">' . twenty_twenty_one_continue_reading_text() . '</a></div>';

        }

    }


    しかし子テーマ化内で同じファイルを触っても反映されません。「inc」フォルダにある事でファイルは上書きできないのでしょうか。

    上書きできないならfunctions.phpに書こうと試しましたが、できませんでした。

    「twenty_twenty_one」の子テーマで「続きを読む」テキストを変更できる手段はほかにないでしょうか。

    ご教授お願い致します。

14件の返信を表示中 - 1 - 14件目 (全14件中)
  • Aki Hamano

    (@wildworks)

    こんにちは。二点確認させてください。

    • 子テーマを作成されたとの事ですが、親テーマから何のファイルをコピーし、どのファイルに変更を加えたのかを全て教えてください。
    • 「functions.phpに書こうと試したができなかった」との事ですが、どのようなコードを試したのかを教えて下さい。
    トピック投稿者 de-0612nishio

    (@de-0612nishio)

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

    あいまいで申し訳ありませんが、ご教授お願い致します。

    Aki Hamano

    (@wildworks)

    確認してみましたが、以下の手順で問題なく変更できました。

    • twentytwentyone-child ディレクトリを作成
    • 作ったディレクトリの中に style.css を作成し、以下のように記述
      /*
      Theme Name: Twenty Twenty-One-child
      Template: twentytwentyone
      */
    • 作ったディレクトリの中に functions.php を作成し、以下のように記述
      <?php
      function twenty_twenty_one_child_excerpt_more() {
      return '&hellip; <a href="' . esc_url( get_permalink() ) . '">詳しく見る</a>';
      }
      add_filter( 'excerpt_more', 'twenty_twenty_one_child_excerpt_more', 20 );
    • 子テーマを有効化

    まずは上記手順で変更できることを確認した後に、親テーマから必要なファイルを子テーマに追加・カスタマイズしていけば、どこで問題が発生するのかを特定できると思います。

    トピック投稿者 de-0612nishio

    (@de-0612nishio)

    Aki Hamano様、返信ありがとうございます。

    全く同じ構成で確認しましたところ、残念ながら期待通り反映されませんでした。

    子テーマ内には指定されたコードの記載している「style.css」と「functions.php」のみです。

    こちらの環境はローカルxamppでphp最新バージョン(8.2.12)です。

    現状、親テーマ内の「inc」フォルダ内のtemplate-functions.phpを直接触るしか変更できません。

    わかる範囲でご教授頂けましたら幸いです。

    Aki Hamano

    (@wildworks)

    確認ですが、一覧ページ(アーカイブページ)で、各投稿のコンテンツ抜粋の後に表示される「続きを読む」というテキストを変更したい、ということで合っていますか?

    また、提案した関数の中(return文の前)でecho 'test'; などを追加してページをリロードしたときに、という文字列はページに表示されますか?これは、その関数が本当に実行されているかどうかをテストするためです。

    トピック投稿者 de-0612nishio

    (@de-0612nishio)

    Aki Hamano

    画像つきで説明頂きありがとうございます。

    投稿記事を追加する際の「続きをよむ」のリンクテキストで間違いございません。

    また、提案した関数の中(return文の前)でecho 'test'; などを追加してページをリロードしたときに、という文字列はページに表示されますか?これは、その関数が本当に実行されているかどうかをテストするためです。

    「echo ‘test’;」を追加すると、表示されました。しかしindex.phpやarchive.phpなどで分岐のある記述「content-excerpt.php」に遷移する箇所を「content.php」に変更して続きをよむボタンを表示させると「echo ‘test’;」も表示されなくなります(どちらにせよ続きをよむ文字は変更できない状態です)。

    回答は急いでいませんので、よろしくお願い致します。

    Aki Hamano

    (@wildworks)

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

    もしそうであれば、どのようにカスタマイズされたのかを教えてください。

    トピック投稿者 de-0612nishio

    (@de-0612nishio)

    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.phparchive.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 自体をカスタマイズされていないでしょうか。

    トピック投稿者 de-0612nishio

    (@de-0612nishio)

    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>&hellip; <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();

    }

    と、頑張ってみたんだけど 間違ってたら「教えてくださいね」

    • この返信は3ヶ月、 3週前にnobitaが編集しました。

    補足

    投稿のmoreブロックは「続きを読む」を「続く」に変更しています。2017はフロントに反映しますが、2021は反映しません。

    クラッシックでmore text をどのように変更したか書いていなかったので、補足

    -------------- 続きを読む -----------------

    more ブロックは、上記のように表示されますが、続きを読むにカーソルを合わせて他の文字を入力できるという意味です。 この機能は、クラッシックテーマ用です。

    ブロックテーマでは、続きを読むボタンは、サイトエディタの方に移行しているので、投稿単位で、続きを読むボタンが追加されることはないみたいです。

    なんとなく状況が分かりました。以下の状況であっていますか?

    • index.phparchive.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 );
    トピック投稿者 de-0612nishio

    (@de-0612nishio)

    Aki Hamano

    長らくやり取りして頂きありがとうございました。

    上記をfunctions.phpに設定すると表示変更出来ました!

    ありがとうございました。早速使わせて頂きます。

    また何かありましたらお助け下さい。

    • この返信は3ヶ月、 2週前にde-0612nishioが編集しました。
14件の返信を表示中 - 1 - 14件目 (全14件中)
  • このトピックに返信するにはログインが必要です。