Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ページレイアウトの変更機能を「パーツの置換」から「テンプレートの置換」を使う形に変更するかどうか #217

Closed
inc2734 opened this issue Nov 30, 2023 · 4 comments

Comments

@inc2734
Copy link
Owner

inc2734 commented Nov 30, 2023

「テンプレートの置換機能」が追加されたのであれば、オフィシャル的にはテンプレートのレイアウト変更はこれを使うべきということだろうけど、さてどうするか…。

問題点

現状 unitone の構成はこんな感じ。

- テンプレート(例:templates/single.html)
	- テンプレートパーツ(例:parts/single.html)
		- テンプレート用パターン(例:template-single-one-column.php)

で、既にカスタマイズしているユーザーさんの場合は、parts/single.html に対して変更が入っていることがほとんどのはず。つまり、「テンプレートの置換機能」を使うために最適化して

- テンプレート(例:templates/single.html)
	- テンプレート用パターン(例:template-single-one-column.php)

としちゃうと、parts/single.html がなくなるので、アップデートした瞬間にカスタマイズした変更がなくなってしまう(データベース、というかパーツには残っているけどページには反映されなくなる)。

これはなかなかのものなので、例えば

  • 「テンプレートの置換機能」を使うために最適化した構造に変更する
  • テンプレートがデーターベースに保存されていない&パーツがデータベースに保存されていたら、フロントではそれが使われるように出力を変更する
  • その場合、アップデートしてもフロントの表示は変わらないけど、サイトエディター上ではカスタマイズが反映されていない素の状態になる

という対応はできるかもしれないけど、v7.0.0 のときと同じでかなり影響が大きいのでつらい…。

コード

add_filter(
	'template_include',
	function( $template ) {
		global $_wp_current_template_id, $_wp_current_template_content;

		$template_object      = get_block_template( $_wp_current_template_id, 'wp_template' );
		$template_part_object = get_block_template( $_wp_current_template_id, 'wp_template_part' );

		// テンプレートがカスタマイズされているとき
		if ( $template_object && $template_object->is_custom ) {
			return $template;
		}

		// テンプレートパーツがカスタマイズされていないとき
		if ( ! $template_part_object || ! $template_part_object->is_custom ) {
			return $template;
		}

		// テンプレートパーツを出力する
		$template_part_slug           = str_replace( get_stylesheet() . '//', '', $_wp_current_template_id );
		$_wp_current_template_content = '<!-- wp:template-part {"slug":"' . $template_part_slug . '"} /-->';

		return $template;
	}
);
@Olein-jp
Copy link
Contributor

ブロックテーマをベースにしたWebサイト開発の手法自体が、まだまだ手探りというかノウハウが見出されたり広まっていたなかったりするので、使う人次第な方法で使われているというのが現状だと思います。

Create Block Theme プラグインはブロックテーマを様々な形で使えるようにしてくれますが、unitone のようなアップデートが比較的盛んなブロックテーマを利用する上で、どう活用するべきなのかも悩ましいところだとは思います。

まだまだブロックテーマやサイトエディターに関する大きなブラッシュアップは続くと思いますし、それらが操作や使い方に影響を及ぼして、大きな仕様変更をするべきだと思うタイミングもまだまだあるような気がします。

ですので、現状 unitone で作り上げているサイトが存在するのであれば、それらは Create Block Theme で複製なりして unitone から脱させることで現状を維持させる、という方法も一つだと思います。その後、大きな変更などが発生する際にブロック等を別のテンプレートへ載せ替えたりする作業は必要になるかもしれませんが、クラシックテーマに比べると作業工数も知れているかなと思いますし。

これら現状を存続させておく方法もアナウンスしながら、最新の unitone については WordPress の動きを読み取って最適解を探していく、というのも一つの考え方なのかなと思いました。(ただの感想ですが…

@inc2734
Copy link
Owner Author

inc2734 commented Nov 30, 2023

試してみたのですが、Create Block Theme で「unitone を複製する」で新テーマを生成すると、PHP と CSS の中の「unitone」という文字列を新テーマ名一括置換するみたいで、unitone は中にブロックを持っていたり等々の影響で、unitone のブロックは読み込まれなくなり、CSS もうまく当たらずにレイアウトが完全にくずれてしまいました……。なので Create Block Theme を使うのは難しそうな感じでした。

でも

まだまだブロックテーマやサイトエディターに関する大きなブラッシュアップは続くと思いますし、それらが操作や使い方に影響を及ぼして、大きな仕様変更をするべきだと思うタイミングもまだまだあるような気がします。

はありますよね…。うーん、早めにやっておいたほうが良いかなー、悩む…。

一応、デフォルトではテンプレートパーツを使わないようにしたとしても、テンプレートパーツは(しばらくは)消さずに残しておこうと思うので、一定の手順でテンプレートを書き換えればもとに戻すことはできはするはずです。

@inc2734
Copy link
Owner Author

inc2734 commented Nov 30, 2023

やはりそのままの状態は長期的に見ればあんまり良くはないと思うので、下準備だけ先にリリースすることにしました。

  • 全部のテンプレート用パターンに Template Types を追加。これにより「テンプレートの置換」が可能に。
  • 既存のテンプレート用パーツの置換機能は廃止(既にパーツをカスタマイズしている人には特に影響なし)

いつデフォルトのテンプレートからパーツを抜くか、パーツ自体を廃止するかはまだ未定です。先に注意喚起だけしておいて半年後・1年後にやるくらいのゆっくりペースが良いのか、でもその間にもしかしたらユーザーがばっと増えるようなことがあるなら被害甚大になってしまうし…まぁ長く期間とって注意喚起しておいたところで見ない人は見ないのでとかもあるし…うーん

@Olein-jp
Copy link
Contributor

Olein-jp commented Dec 1, 2023

対応が素早い…

このイシューに関わらずなのかもですが、今後まだまだ WordPress 側の進化によって最適化するべきポイントが出てくることは必然でしょうし、内容によっては大きな変化を伴うこともあるでしょうね。

しかし、そういう時期にはリカバリー方法などを提供していきながら、ユーザーにも並走してもらえるようにしていくしかないのかもしれませんね。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants