Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordP...

ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordPress Meetup

Avatar for Toro_Unit (Hiroshi Urabe)

Toro_Unit (Hiroshi Urabe)

January 31, 2026
Tweet

More Decks by Toro_Unit (Hiroshi Urabe)

Other Decks in Technology

Transcript

  1. $ whoami Toro_Unit / 占部 紘 Freelance Frontend & WordPress

    Engineer WordPress Contributor Github: @torounit / X: @Toro_Unit 2
  2. 5

  3. WordPress 5.9 で導入されたテーマ。( Beta が取れたのは 6.2 ) フルサイト編集 (Full Site

    Editing, FSE) に対応。 従来のテーマと異なり、PHP テンプレートファイルを持たず、HTML テン プレートと theme.json で構成される。 ブロックエディターを使用して、サイト全体のレイアウトやデザインをカ スタマイズ可能。 ここ数年のデフォルトテーマ (Twenty Twenty-Two 以降) は全てブロックテ ーマ。 6
  4. 8

  5. カスタムフィールドもブロックで扱えるようになりました (WordPress 6.5) register_post_meta( 'post', 'my_custom_field', array( 'show_in_rest' => true,

    'single' => true, 'type' => 'string', ) ); <!-- wp:paragraph { "metadata":{ "bindings":{ "content":{ "source":"core/post-meta", "args":{"key":"my_custom_field"} } } } } --><p>Fallback content</p><!-- /wp:paragraph --> 12
  6. プラグイン側からブロックパターンを登録することも可能 register_block_pattern( 'my-plugin/my_custom_field', array( 'title' => 'My Custom Field', 'description'

    => 'My Custom Field', 'content' => '<!-- wp:paragraph { "metadata":{"bindings":{"content":{"source":"core/post-meta","args":{"key":"my_custom_field"}}}}} --> <p>Fallback content</p> <!-- /wp:paragraph -->', ) ); 13
  7. 17

  8. 21

  9. 22

  10. 実装方針 基本的に、theme.json で出来ることは可能な限り theme.json で。 css を直接書けば何でも出来るけど、theme.json の挙動など考慮すること が増えるので、可能な限り theme.json

    や、WordPress 側の機能で実装した い。 ナビゲーションなどは、css 変数が用いられているのでそれを上書きした りすれば多少はコントロール可能。 せっかくデザインから自分でやるので、CSS のビルドしない!(決意 23
  11. 26

  12. 29

  13. 30

  14. currentColor をとにかく頑張って使う。 "border": { "bottom": { "color": "currentColor", "style": "solid",

    "width": "4px" }, "left": { "color": "currentColor", "style": "solid", "width": "4px" }, "right": { "color": "currentColor", "style": "solid", "width": "4px" }, "top": { "color": "currentColor", "style": "solid", "width": "4px" } }, "color": { "text": "var(--wp--preset--color--primary)" 36
  15. pointer-events:auto; word-break:auto-phrase; display:inline-flex; align-items:center; justify-content:space-between; gap: var(--wp--preset--spacing--50); &::after { content:

    ''; font-size: 0.8rem; display: inline-block; vertical-align:middle; clip-path: polygon(0.8em 50%, 0% 0%, 0% 1em); width: 1em; height: 1em; background-color: currentColor; transition:all 0.1s ease-out 0s; } &:hover::after { transform: translateX(0.5em); }", clip-path とかで頑張れば複雑な形とかも 使える。 37
  16. color-function も使える color に指定する値は、CSS プロパティで指定可能なモノなら何でも 出来るので、 calc() や rgba() なども

    利用可能。 色のルールなどをちゃんと整備すると、 ブロックスタイルを増やさずに済む。 38
  17. 41

  18. --navigation-layout-justification-setting: stretch; & button.wp-block-navigation__responsive-container-open::before { content: "Menu"; margin-right: 4px; font-size:

    1rem; font-weight: bold; text-transform: uppercase; } & button.wp-block-navigation__responsive-container-close::before { content: "Close"; margin-right: 4px; font-size: 1rem; font-weight: bold; text-transform: uppercase; } & .wp-block-navigation__responsive-container-close { display: flex; } & .wp-block-navigation__responsive-container { padding: var(--wp--preset--spacing--50) !important; } & .wp-block-navigation__responsive-close { max-width: none !important; } & .wp-block-navigation__responsive-container-content { max-width: var(--wp--style--global--content-size); margin: 0 auto; } & .wp-block-navigation-submenu.wp-block-navigation__submenu-container { padding: var(--wp--preset--spacing--40) !important; padding-top: 0 !important; } & .wp-block-navigation-submenu.wp-block-navigation__submenu-container .wp-block-navigation-item { font-size: var(--wp--preset--font-size--regular) !important; } 42
  19. ナビゲーションのブロックの CSS には、 --navigation-layout-justification-setting: flex-start; --navigation-layout-direction: row; --navigation-layout-wrap: wrap; --navigation-layout-justify:

    flex-start; --navigation-layout-align: center; 等の CSS 変数が用いられているので、ここを上書きしたりで多少の レイアウトの調整は可能。 43
  20. CSS力は要らない? 必要!!!! theme.json だけで完結するにしても、 clamp や currentColor 、 calc() などを駆使する必要があるので、CSS力は必

    須。 CSS を書かないためにもCSS力はいる。 theme.json の機能では難しいCSSプロパティは沢山ある。 (例:position, z-index, subgrid...etc) 規模が大きくなると、パターンのCSS管理、カスタムブロック開発など必 要になる! 52