Lightningテーマでsingle.phpを子テーマに置いたらレイアウトが崩れた話

single.phpはダメ!と言っている女の子の画像

WordPressで投稿ページのテンプレートをカスタマイズするとき、多くのテーマでは「子テーマに single.php をコピーして編集する」方法が一般的です。ところが、Lightning(特に G3 版)の場合、この方法がそのまま通用しません。実際に single.php を子テーマへ追加したところ、ヘッダーやフッターが表示されなくなるという問題が発生しました。

同じ状況で困っている方の参考になるよう、今回の流れと原因、正しい対処法をまとめます。


■ きっかけ:前後ナビを調整しようとした

今回のカスタマイズ目的は、投稿ページに表示される「前の記事」「次の記事」ナビゲーションを確実に表示したい、または見た目を調整したいというものでした。

一般的なテーマでは、投稿ページの構造を変えるには子テーマに single.php を作成すれば対応できます。そのため、まずはこの方法を試しました。


■ 子テーマに single.php を追加した直後の問題

子テーマに以下のような最小構成の single.php を置いたところ、

<?php
get_header();
?>

<div class="container">
    <?php
    while ( have_posts() ) :
        the_post();

        // 本文
        the_content();

        // Lightning標準の前後ナビ
        get_template_part( '_g3/template-parts/next-prev' );

    endwhile;
    ?>
</div>

<?php
get_footer();

ページ表示時に、

  • ヘッダーが消える
  • フッターも消える
  • Lightning のレイアウト全体が破壊される(そっけないレイアウトで表示される)

という症状が発生しました。

ファイルの中身としては正しくとも、Lightning にとっては重要な仕組みが抜け落ちた状態になっていたことが原因です。


■ Lightning(G3)の構造は一般的なテーマと異なる

Lightning G3 では投稿ページの構築に標準テンプレートではなく

Lightning_Layout::render( 'singular' );

という 独自のレイアウトエンジン を使用しています。

元の Lightning の single.php の中身は非常にシンプルで、次のようになっています。

<?php
get_header();
Lightning_Layout::render( 'singular' );
get_footer();

この1行がレイアウトの中心であり、
ヘッダー・フッター・コンテンツ領域・前後ナビなども、このエンジンを通じて組み立てられています。

このため、子テーマ側で single.php を独自に作ってしまうと、Lightning のレイアウト・フック・テンプレート呼び出しが完全にスキップされる構造になっています。


■ 結論:Lightningでの single.php は実質「非推奨」

WordPress全体では一般的な方法であっても、Lightningでは

子テーマで single.php を作成する → 独自レイアウトエンジンが無効化される

という構造になっており、公式としても推奨されません。

そのため、投稿ページの細かいカスタマイズは

  • CSS
  • functions.php のフック
  • get_template_part を使った追加テンプレート
    など、レイアウトエンジンを壊さない方法が適しています。

■ 対処:single.php を削除すれば正常に戻る

今回のケースでは、
子テーマの single.php を削除するだけでレイアウトはすべて復旧しました。

Lightning のデフォルト構成に戻れば、ヘッダー・フッター・前後ナビも正常に表示されます。


■ 今回得られた教訓

  • WordPress の一般的なカスタマイズ方法が必ずしもすべてのテーマに通用するわけではない
  • Lightning(特に G3)は特有のレイアウトエンジンを持っている
  • single.php の上書きは標準テーマでは便利だが、Lightning では非推奨
  • カスタマイズ前にテーマの構造を確認することが大切

Lightning は便利なテーマですが、独自構造を理解していないと意図せずレイアウト全体を上書きしてしまう可能性があります。

同じように「single.php を子テーマに置いたら表示が崩れた」というユーザーは少なくないため、本記事が参考になれば幸いです。

コメント

PAGE TOP