Amazonで商品を見る セール会場へ

WordPressで長い文章を折りたたむ方法|続きを読むボタンの見本とコード

長い説明文の先頭を表示し、「続きを読む」ボタンで全文を開く方法です。

WordPressのグループと段落ブロックにCSS・JavaScriptを追加します。

本文内のリンクを押しても勝手に閉じず、ボタンを使って開閉できます。

初めから内容をすべて隠してよい場合は、標準の「詳細」ブロックやSWELLのアコーディオンブロックを使う方法もあります。

この実装は、先頭の文章を残して概要を見せたい場合に向いています。

目次

著者

WEB制作をしているデジタルノマド
WordPressのカスタマイズが好きで、色々と自作しています。

WordPressのカスタマイズに困ったらご相談ください!

動く見本:続きを開く・閉じる

先頭160文字を表示する見本です。

2つのボタンはそれぞれの文章だけを操作します。

短い文章にはボタンを付けません。

WordPressでカスタマイズするときは、最初に作りたい表示を決めます。コードを追加する前に、標準ブロックやテーマの設定だけで作れないか確認してください。追加CSSで調整する場合も、変更前の内容を保存してから一つずつ試します。表示できたら、スマホの幅に切り替えて、文字の折り返しやボタンの押しやすさも確かめます。公開後に困らないよう、元へ戻すために削除する範囲も記録しておきましょう。

目的別のカスタマイズ一覧を見る

長い説明を折りたたむと、読者は最初の文章から概要をつかみ、必要なときに続きを開けます。ただし、申込条件や費用など、判断に必要な情報まで隠す使い方は避けてください。文章の先頭だけでは内容が伝わらない場合は、最初の段落を短い説明に書き直す方法もあります。内容を整理したうえで、詳細だけを折りたたむと読み進めやすくなります。この見本では二つの説明を別々に開閉できるようにして、それぞれのボタンの状態を確認します。

ボタンにはTabキーで移動でき、Enter・Spaceで開閉できます。

開くと本文中のリンクも利用できます。

先頭の省略表示では文章だけを見せ、リンクは全文を開いてから操作する構成です。

ブロックを作って専用クラスを付ける

外側にグループブロックを作り、「高度な設定 → 追加CSSクラス」にwaza-readmoreを指定します。

その直下にもう一つグループを作り、waza-readmore-contentを指定してください。

内側のグループへ折りたたみたい段落を入れます。

クラス名の先頭にドットは付けません。

複数作る場合は、このグループの組み合わせを必要な数だけ配置します。

中へさらに同じ仕組みを入れる入れ子構成は、この例の対象外です。

外側に見出しを置き、内側は文章中心にすると、折りたたんだ状態でも内容を判断できます。

カスタムHTMLブロックで試す場合は、次のHTMLを貼り付けます。

見本用の文章とリンクを自分の内容へ置き換えてください。

<div class="waza-readmore">
  <div class="waza-readmore-content">
    <p>WordPressでカスタマイズするときは、最初に作りたい表示を決めます。コードを追加する前に、標準ブロックやテーマの設定だけで作れないか確認してください。追加CSSで調整する場合も、変更前の内容を保存してから一つずつ試します。表示できたら、スマホの幅に切り替えて、文字の折り返しやボタンの押しやすさも確かめます。公開後に困らないよう、元へ戻すために削除する範囲も記録しておきましょう。</p>
    <p><a href="https://motoki-design.co.jp/wordpress/swell-customize-matome/">目的別のカスタマイズ一覧を見る</a></p>
  </div>
</div>

CSSを追加する

SWELLでは「外観 → カスタマイズ → 追加CSS」へ追加します。

ボタンと非表示の指定を専用クラスの中に限定しています。

変更前の追加CSSはテキストファイルなどへ保存してください。

.waza-readmore > [hidden] { display: none !important; }
.waza-readmore > .waza-readmore-button {
  min-height: 44px;
  padding: .6em 1.2em;
  border: 1px solid #888;
  border-radius: 4px;
  background: #fff;
  color: #333;
  font: inherit;
  cursor: pointer;
}
.waza-readmore > .waza-readmore-button:focus-visible {
  outline: 3px solid #245bba;
  outline-offset: 3px;
}

JavaScriptを追加する

SWELLの記事編集画面の「カスタムJS」欄に、scriptタグを付けずに貼り付けます。

他のテーマでは、テーマが用意するJavaScriptの読み込み方法を使ってください。

PHPファイルや追加CSSに、そのまま貼り付けるコードではありません。

(function () {
  function initReadMore() {
    document.querySelectorAll('.waza-readmore').forEach(function (box, index) {
      if (box.dataset.wazaReady) return;
      const content = Array.from(box.children).find(function (el) {
        return el.classList.contains('waza-readmore-content');
      });
      if (!content) return;
      const text = Array.from(content.textContent.trim());
      const limit = 160;
      if (text.length <= limit) return;
      const preview = document.createElement('p');
      preview.className = 'waza-readmore-preview';
      preview.textContent = text.slice(0, limit).join('') + '…';
      const button = document.createElement('button');
      button.type = 'button';
      button.className = 'waza-readmore-button';
      button.textContent = '続きを読む';
      let id = 'waza-readmore-panel-' + index;
      while (document.getElementById(id)) id += '-x';
      if (!content.id) content.id = id;
      button.setAttribute('aria-controls', content.id);
      button.setAttribute('aria-expanded', 'false');
      content.before(preview);
      content.after(button);
      content.hidden = true;
      button.addEventListener('click', function () {
        const open = button.getAttribute('aria-expanded') === 'true';
        content.hidden = open;
        preview.hidden = !open;
        button.setAttribute('aria-expanded', String(!open));
        button.textContent = open ? '続きを読む' : '閉じる';
      });
      box.dataset.wazaReady = '1';
    });
  }
  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', initReadMore, { once: true });
  else initReadMore();
})();

省略表示する文字数はconst limit = 160;で変更します。

行数や高さによる省略ではないため、画面幅によって見える行数は変わります。

省略表示の文章は元のテキストから作り、全文を開いたときは元のHTMLを表示します。

判定には内側グループのtextContentを使うため、リンクの文字列やHTML内に残る途中の空白・改行も数えます。

先頭と末尾の空白は取り除きますが、画面で見える文字だけを目で数えた結果とは一致しない場合があります。

Array.fromによる数え方では、結合文字や複数の文字で構成される絵文字が見た目の1文字と一致しないこともあります。

文字数の扱いはMDNのtextContentと文字列の反復処理を参照しています(2026年10月4日確認)。

このコードは初期化時に存在するグループを対象にし、その後Ajaxなどで追加されたグループを自動では初期化しません。

JavaScriptが読み込まれなければ、元の全文が表示されたままになります。

JavaScriptだけを削除した場合も、再読み込み後は全文へ戻ります。

画像だけの内容や、文章の途中で画像・表の見た目を残したい用途には、この文字数による省略は向いていません。

2026年10月4日、掲載CSS・JavaScriptをそのまま使ったローカルHTMLで、通常の日本語160文字は全文表示、161文字はボタン付きの省略表示になることを確認しました。

同じローカル確認で、リンク文字列・途中の改行が数えられること、Enter・Spaceでの開閉、JavaScript無効時の全文表示、初期化後に追加したグループへボタンが付かないことも確認しています。

これはWordPress編集画面での保存、全ブラウザー・支援技術の組み合わせを検証した結果ではありません。

旧版からの変更と元に戻す方法

旧版のaccordion-boxとaccordion-descriptionを使っている場合は、旧CSSと旧PHP・JavaScriptを控えてから取り外し、新しいクラスへ置き換えます。

旧版は枠全体のクリックで開閉し、疑似要素でボタンを描く方式でした。

新版は実際のbutton要素だけを操作対象にしています。

元に戻すときは今回追加したCSS・JavaScriptと専用クラスを削除します。

グループ内の文章は残せます。

表示が変わらない場合は保存とキャッシュを確認し、開閉しない場合は外側・内側のクラスとグループの階層を確認してください。

項目の階層を折りたたむならリストブロックの開閉、質問と回答にはSWELLのFAQの開閉を使えます。

コードを追加する前に標準・SWELLブロックの見本も確認してください。

短い文章にはボタンを付けない

次の文章は160文字以下なので、省略表示と開閉ボタンを追加しません。

リンクも最初から操作できます。

長い文章の見本を開くと、プレビューは隠れ、元のHTMLにあるリンクを操作できます。

短い説明は全文を表示します。項目を開閉するリストの見本も比較できます。

スマホでの操作画面

短い説明は折りたたまず、リンクも最初から表示します。

長い説明の見本と比べて、ボタンを追加しない場合を確認できます。

短い説明が開閉ボタンなしで全文表示された画面
2026年10月2日撮影。WAZAの公開ページ、スマホ幅390pxで確認。
  • URLをコピーしました!

実装を任せたい方へ

WordPressのカスタマイズ代行

ブロックの追加、テーマの改修、管理画面の調整など、記事で紹介している内容の実装を承ります。1時間 ¥8,000〜(税込)。

WAZAの有料記事のサブスクリプションも開始しました。

サービス

Service

WordPressサイトのカスタマイズのサービスに関心がありましたら、ぜひ詳細をご覧ください。

目次