inc2734 / unitone

34 stars 4 forks source link

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

Closed inc2734 closed 10 months ago

inc2734 commented 11 months ago

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

問題点

現状 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 commented 11 months ago

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

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

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

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

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

inc2734 commented 11 months ago

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

でも

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

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

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

inc2734 commented 11 months ago

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

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

Olein-jp commented 11 months ago

対応が素早い…

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

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