はじめに

WordPress 6.9で追加された「ブロックの非表示(Visibility)」機能は、一見すると「ブロック単位の下書き」や「フロント表示制御」のための機能のように見えます。
しかし実際には、エディターからもフロントからも完全に消えてしまうため、次のように戸惑うケースも少なくありません。
- これは下書きブロック機能なのでは?
- 作成途中のブロックをフロントだけ隠したいのに使えない
この記事では、WordPress 6.9のブロック非表示機能の目的と誤解されやすい点を整理し、提示コードの意図と実務での活用方法を簡潔に説明します。
WordPress 6.9「ブロックの表示/非表示」機能の本来の狙い
WordPress 6.9 の「ブロックの表示/非表示(block visibility)」機能は、公開制御を目的としたものではなく、編集体験の改善を主な目的として設計されています。
具体的には、以下のようなケースで、ブロックをエディタ上のキャンバスから一時的に非表示にして、作業をしやすくするための機能です。
- 過去の内容や構成案を削除せずに、非表示として残しておきたい場合
- 現在は編集対象でないブロックを整理して、編集作業をスムーズにしたい場合
そのため、blockVisibility = falseに設定したブロックは、表1に示すような挙動を示します。
これは WordPress の仕様通りであり、バグではありません。
| 状態 | 挙動 |
|---|---|
| エディター | 非表示 |
| フロント | 非表示 |
よくある勘違い「下書きブロック機能」だと思ってしまう理由
多くの人が期待するのは、フロントには表示させず、エディター上では見ながら編集できる「ブロック単位の下書き状態」です。
しかし、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フィルターを活用してフロント側の表示を制御することで、実務で求められる柔軟な運用が可能になります。


