【WordPress】投稿タイプごとにブロックの表示非表示を切り替える

2019年7月31日

使わないブロックを消したい

WordPressのブロックエディタ(Gutenberg)に用意されているブロックの数(特に埋め込み)が多すぎてちょっと使いづらい。

使わないブロックは消したい! そしてできれば投稿タイプごとに変えたい!

 

表示させるブロックはfunctions.phpで設定できる

add_filter( 'allowed_block_types', 'custom_allowed_block_types' );
function custom_allowed_block_types( $allowed_block_types ) {
$allowed_block_types = array(
'core/paragraph',
'core/heading',
'core/image',
);
return $allowed_block_types;
}

表示したいブロックを全部書く必要があるので、必要なものを選ぶ。

ブロック名は \wp-includes\js\dist\block-library.js ここに書かれている。

参考:Removing Default Gutenberg Blocks

 

プラグインで追加したブロックも、同じように設定できる

たとえばBlock Labで追加したブロックは「block-lab/[ブロックのスラッグ名]」となる。

'block-lab/testblock'

Lazy Blocksで追加したブロックは「lazyblock/[ブロックのスラッグ名]」となる

'lazyblock/testblock'

 

投稿タイプごとに、設定をifで切り分ける

allowed_block_typesの記述をpost_typeごとに分岐させることで、管理画面上の表示を制御できる。

functions.php

//表示ブロック設定
add_filter( 'allowed_block_types', 'custom_allowed_block_types', 10, 2 );
function custom_allowed_block_types($allowed_block_types, $post)
{
    if ( $post->post_type === 'post' ) {//postの時
        $allowed_block_types = array(
            'core/paragraph', // 段落
            'core/heading',             // 見出し
            'core/image',               // 画像
            'core/quote',               // 引用
            'core/gallery',             // ギャラリー
            'core/list',                // リスト
            'core/audio',               // 音声
            'core/file',                // ファイル
            'core/video',               // 動画

            // フォーマット
            'core/code',                // ソースコード
            'core/freeform',            // クラシック
            'core/html',                // カスタムHTML
            'core/table',               // テーブル

            // ウィジェット
            'core/shortcode',           // ショートコード

            // 埋め込み
            'core/embed',               // 埋め込み
            'core-embed/youtube',       // YouTube

            // 再利用ブロック
            'core/block',               // 再利用ブロック

            //block-labプラグインの追加ブロック
            'block-lab/testblock' //block-lab追加ブロック
        );
    }
    else{//それ以外の時
        $allowed_block_types = array(
            'core/paragraph', // 段落
            'core/heading',             // 見出し
            'core/image',               // 画像
            'core/quote',               // 引用
            'core/gallery',             // ギャラリー
            'core/list',                // リスト

            // フォーマット
            'core/code',                // ソースコード
            'core/freeform',            // クラシック
            'core/html',                // カスタムHTML
            'core/table',               // テーブル

            // ウィジェット
            'core/shortcode',           // ショートコード
        );
    }
    return $allowed_block_types;
}

 

参考↓↓

WordPress:Gutenbergでデフォルト表示されているブロックを非表示にする方法

 

[おまけ] 特定の固定ページだけ表示ブロックを変える

分岐をpost_typeではなくpost_nameで行えば、投稿/固定ページのslugで分岐できます。

add_filter('allowed_block_types', 'custom_allowed_block_types', 10, 2);
function custom_allowed_block_types($allowed_block_types, $post)
{
    if ($post->post_name === 'product') {//投稿スラッグproductのとき
        $allowed_block_types = array(
            'core/paragraph',           // 段落
            'core/heading',             // 見出し
            'core/image',               // 画像
            'core/quote',               // 引用
            'core/gallery',             // ギャラリー
            'core/list',                // リスト
            'lazyblock/balloon'        // Lazy blocksのオリジナルブロック
        );
    } else {
        $allowed_block_types = array(
            'core/paragraph',           // 段落
            'core/heading',             // 見出し
            'core/image',               // 画像
            'core/quote',               // 引用
            'core/gallery',             // ギャラリー
            'core/list',                // リスト
        );
    }
    return $allowed_block_types;
}