WordPress 6.9で追加された「ブロックの表示/非表示」機能について

Cocoonカスタマイズ集
この記事は約4分で読めます。
記事内に広告が含まれています。

はじめに

ブロックの表示/非表示

WordPress 6.9で追加された「ブロックの非表示(Visibility)」機能は、一見すると「ブロック単位の下書き」や「フロント表示制御」のための機能のように見えます。

しかし実際には、エディターからもフロントからも完全に消えてしまうため、次のように戸惑うケースも少なくありません。

  • これは下書きブロック機能なのでは?
  • 作成途中のブロックをフロントだけ隠したいのに使えない

この記事では、WordPress 6.9のブロック非表示機能の目的と誤解されやすい点を整理し、提示コードの意図と実務での活用方法を簡潔に説明します。

WordPress 6.9「ブロックの表示/非表示」機能の本来の狙い

WordPress 6.9 の「ブロックの表示/非表示(block visibility)」機能は、公開制御を目的としたものではなく、編集体験の改善を主な目的として設計されています。

具体的には、以下のようなケースで、ブロックをエディタ上のキャンバスから一時的に非表示にして、作業をしやすくするための機能です。

  • 過去の内容や構成案を削除せずに、非表示として残しておきたい場合
  • 現在は編集対象でないブロックを整理して、編集作業をスムーズにしたい場合

そのため、blockVisibility = falseに設定したブロックは、表1に示すような挙動を示します。
これは WordPress の仕様通りであり、バグではありません。

blockVisibility=falseの挙動
状態挙動
エディター非表示
フロント非表示

よくある勘違い「下書きブロック機能」だと思ってしまう理由

多くの人が期待するのは、フロントには表示させず、エディター上では見ながら編集できる「ブロック単位の下書き状態」です。

しかし、WordPress 6.9のvisibilityは目的が編集画面のノイズ除去であり、公開制御は行わず、エディター上でもフロントでも非表示になります。
つまり、非表示機能は下書きブロックではなく、あくまで編集用のビューフラグとして設計されているため、このような勘違いが生まれやすいのです。

ログインユーザーだけ表示したい場合の実装例

例えば次のようなケースでは、フロント側だけ表示を制御したいことがあります。

  • 編集者・管理者だけ見えるブロック
  • 会員限定セクション
  • 公開前の構成案ブロック

このような場合は、WordPress 6.9 の標準挙動を差し替えることで実現できます。
なお、Cocoon には「ログイン」ブロックが標準搭載されています。

実装手順

以下のコードをfunctions.phpに追加します。

ログインユーザーのみフロントで非表示に設定されたブロックを表示できるようになります。

// コアのブロック非表示処理を無効化
remove_filter('render_block', 'wp_render_block_visibility_support', 10);


// フロントでのみログインユーザーに表示
add_filter('render_block', function ($block_content, $block) {
  $block_type = WP_Block_Type_Registry::get_instance()->get_registered($block['blockName']);
  if (!$block_type || !block_has_support($block_type, 'visibility', true)) {
    return $block_content;
  }

  $visibility = $block['attrs']['metadata']['blockVisibility'] ?? null;
  if ($visibility === false) {
    return is_user_logged_in() ? $block_content : '';
  }

  return $block_content;
}, 10, 2);

さいごに

WordPress 6.9のブロック非表示機能は、あくまで編集画面での整理や視認性向上を目的とした設計であり、下書きブロックや公開制御を意図したものではありません。
その仕様を理解したうえで、render_blockフィルターを活用してフロント側の表示を制御することで、実務で求められる柔軟な運用が可能になります。

タイトルとURLをコピーしました