【WordPress】Understrapを0.9.4 → 0.9.5にアップデートしたらブログが崩壊しました【Understrap】

Understrap
このブログのテンプレートは、Bootstrap4を採用していてほぼスケルトンなテンプレート「Understrap」を親テーマとする子テーマ「Understrap-child」をカスタマイズして作成されています。


WordPress + Bootstrap 4 Starter Theme Framework – Understrap


先日「Understrap」の開発元が元々の開発者から変わったそうで、長いこと止まっていた開発を新しい開発者の元で再開する旨が発表されていました。


As you know, last month my team and I acquired Understrap and will be hard at work reinvigorating the community and rolling out lots of improvements.

Announcing Understrap 0.9.5 – Understrap WordPress Theme Framework


その一環と言うことなのか、Understrapが「0.9.4」から「0.9.5」にアップデートされることになり、WordPressの更新にも掲載されていたので何の気なしにアップデートしてしまったんですがこれが大間違い。ブログが崩壊しました。



問題点

調べた限りでは問題点は次の通り。

  1. 子テーマで用意していた「inc」ディレクトリ以下のファイルが読み込まれなくなった
  2. サイドバーのウィジェットの設定が全部飛んだ

とにかく大きいのは1番目。子テーマの「inc」ディレクトリ以下に独自関数を配置してそれを読み込んで処理していた部分が多くて(例えば投稿日時表示のカスタマイズとか、カテゴリー表示のカスタマイズとか)、それを全部読み込まなくなったので、独自関数が全部undefinedになって描写が途中で止まるって言う。ダメじゃん。

ソースを見てみると、親テーマ「Understrap」の functions.php が変わってて、元々は「親テーマと子テーマの inc ディレクトリ以下にある、特定のファイルを require_once する」という処理になっていたのが、「親テーマの inc ディレクトリ以下にある、特定のファイルを require_once する」と変わってて、そりゃあエラーになるよね。てか何でそんなことしたんだよ。ふざけんなよ。



解決策

実は修正を試みて何時間か頑張ったあと最終的にはコミットを巻き戻す(≒0.9.4に戻す)ことで修正してしまったのですが、修正を試みる中で子テーマの functions.php に以下の記述を追加することで問題を回避出来ました。


$understrap_child_inc_dir  = get_stylesheet_directory() . '/inc';
$understrap_child_includes = [
   '/setup.php',                           // Theme setup and custom theme supports.
   '/widgets.php',                         // Register widget area.
   '/template-tags.php',                   // Custom template tags for this theme.
   '/extras.php',                          // Custom functions that act independently of the theme templates.
];
foreach ( $understrap_child_includes as $file ) {
   require_once $understrap_child_inc_dir . $file;
}


get_stylesheet_directory() は子テーマのディレクトリを返すWordPress関数。これで改めて require_once することで独自関数を呼び出せるようにしています($understrap_child_includes に追加するファイルは適宜変更してください。)。



ちなみに次バージョンでは修正されるっぽい

WordPress更新で更新出来るのは有り難いんだけど、後方互換を変更するときは事前に警告して欲しいですね。特にWordPressの更新はバージョンアップは出来てもダウンは出来ないわけだから……僕以外の「Understrap」ユーザーが被害を受けているのかどうかは定かではありませんが、個人的には「リリース一発目からやらかしやがったな」という感想しかありません。しばらくは更新が来ても無視ですね。

GitHubを見る限りでは既にバグ報告され、修正コミットがマージされてるっぽいので、次バージョンでは少なくともこの部分については修正されるでしょう。頼むぜ。


Most recent update – messed up child theme. · Issue #1278 · understrap/understrap
Use get_theme_file_path() to make include files child theme friendly. · understrap/understrap@b67af17