Gutenberg disallow certain custom blocks but keep all core blocks?












5















I'm writing a function to allow only some custom blocks - essentially I want to register all the blocks, then based on a database table of 'selected' blocks disallow any other custom block.



I can use allowed_block_types to make an array of allowed blocks, but it wipes all the core ones, is there a way to either get a reliable list of core blocks, or only add a filter for plugin/theme registered blocks? Or possibly, allow all block
categories then my own block category is filtered?










share|improve this question



























    5















    I'm writing a function to allow only some custom blocks - essentially I want to register all the blocks, then based on a database table of 'selected' blocks disallow any other custom block.



    I can use allowed_block_types to make an array of allowed blocks, but it wipes all the core ones, is there a way to either get a reliable list of core blocks, or only add a filter for plugin/theme registered blocks? Or possibly, allow all block
    categories then my own block category is filtered?










    share|improve this question

























      5












      5








      5








      I'm writing a function to allow only some custom blocks - essentially I want to register all the blocks, then based on a database table of 'selected' blocks disallow any other custom block.



      I can use allowed_block_types to make an array of allowed blocks, but it wipes all the core ones, is there a way to either get a reliable list of core blocks, or only add a filter for plugin/theme registered blocks? Or possibly, allow all block
      categories then my own block category is filtered?










      share|improve this question














      I'm writing a function to allow only some custom blocks - essentially I want to register all the blocks, then based on a database table of 'selected' blocks disallow any other custom block.



      I can use allowed_block_types to make an array of allowed blocks, but it wipes all the core ones, is there a way to either get a reliable list of core blocks, or only add a filter for plugin/theme registered blocks? Or possibly, allow all block
      categories then my own block category is filtered?







      plugins functions block-editor






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Jan 28 at 17:26









      AravonaAravona

      365317




      365317






















          2 Answers
          2






          active

          oldest

          votes


















          5














          AFAIK there is only one way to remove blocks from Gutenberg - you have to use allowed_block_types filter.



          Unfortunately Gutenberg developers are not very familiar with WordPress hooks and filters, so they created a little monster with this one. So instead of passing a list of core blocks in there, they pass true to enable all blocks. That way you're unable to obtain the list of all blocks registered.



          So if you want to disable just one block, then you have to get all blocks bu yourself...



          Here's the list of core blocks:




          • core/shortcode

          • core/image

          • core/gallery

          • core/heading

          • core/quote

          • core/embed

          • core/list

          • core/separator

          • core/more

          • core/button

          • core/pullquote

          • core/table

          • core/preformatted

          • core/code

          • core/html

          • core/freeform

          • core/latest-posts

          • core/categories

          • core/cover-image

          • core/text-columns

          • core/verse

          • core/video

          • core/audio

          • core/block

          • core/paragraph


          • core-embed/twitter


          • core-embed/youtube

          • core-embed/facebook

          • core-embed/instagram

          • core-embed/wordpress

          • core-embed/soundcloud

          • core-embed/spotify

          • core-embed/flickr

          • core-embed/vimeo

          • core-embed/animoto

          • core-embed/cloudup

          • core-embed/collegehumor

          • core-embed/dailymotion

          • core-embed/funnyordie

          • core-embed/hulu

          • core-embed/imgur

          • core-embed/issuu

          • core-embed/kickstarter

          • core-embed/meetup-com

          • core-embed/mixcloud

          • core-embed/photobucket

          • core-embed/polldaddy

          • core-embed/reddit

          • core-embed/reverbnation

          • core-embed/screencast

          • core-embed/scribd

          • core-embed/slideshare

          • core-embed/smugmug

          • core-embed/speaker

          • core-embed/ted

          • core-embed/tumblr

          • core-embed/videopress

          • core-embed/wordpress-tv


          On the other hand...



          It's a lot easier to unregister given block in JS... In there you can use:



          wp.blocks.unregisterBlockType( 'core/verse' );





          share|improve this answer
























          • Quite the list! I appreciate the effort getting it. It is frustrating there is not a better hook from the Gutenberg developers - thank you for the answer.

            – Aravona
            Jan 29 at 9:31











          • Totally agree on that. It should be possible to get list of all registered blocks with PHP...

            – Krzysiek Dróżdż
            Jan 29 at 9:41



















          4














          There's a whitelist blocks removal example from the Gutenberg Handbook:



          var allowedBlocks = [
          'core/paragraph',
          'core/image',
          'core/html',
          'core/freeform'
          ];

          wp.blocks.getBlockTypes().forEach( function( blockType ) {
          if ( allowedBlocks.indexOf( blockType.name ) === -1 ) {
          wp.blocks.unregisterBlockType( blockType.name );
          }
          } );


          One might try to modify it to remove blocks that do not start with core and are not part of allowedExtraBlocks (untested):



          var allowedExtraBlocks = [
          'my-plugin/block-example-1',
          'my-plugin/block-example-2'
          ];

          wp.blocks.getBlockTypes().forEach( function( blockType ) {
          if ( ! blockType.name.startsWith( 'core' )
          && allowedExtraBlocks.indexOf( blockType.name ) === -1
          ) {
          wp.blocks.unregisterBlockType( blockType.name );
          }
          } );


          One could adjust this further to match block names that start with core/ or core-embed/ instead of core to be more precise.



          The blacklist example wraps it with:



          wp.domReady( function() {
          // ...
          } );


          so this might be needed for the whitelist example too.





          Here's a quick way to see available blocks on the editing page, in the browser's console:



          In the 5.1 version there are 70 core blocks available, according to



          wp.blocks.getBlockTypes().length;


          number of core blocks



          The list of available block names:



          wp.blocks.getBlockTypes().forEach( function( blockType ){ console.log( blockType.name ); }); 


          block names



          Here's a table of available blocks:



          console.table( wp.blocks.getBlockTypes() );


          Table of available blocks






          share|improve this answer





















          • 1





            The part I really don’t like in this code is that it’s on JS side. It would be nice to be able to restrict this on PHP side... :(

            – Krzysiek Dróżdż
            Jan 28 at 20:42











          • It would be nice to have a PHP version, maybe one could look further at WP_Block_Type_Registry::get_instance()->get_all_registered() within the allowed_block_types filter callback, but it will probably not show all blocks there. @KrzysiekDróżdż

            – birgire
            Jan 28 at 20:46








          • 2





            No, it does not. I’ve already created a ticket with such enhancement in trac

            – Krzysiek Dróżdż
            Jan 28 at 20:48






          • 2





            Thanks for this answer! I agree with @KrzysiekDróżdż that it's frustrating there is no PHP solution to this as it stands. I appreciate the answer though and a JS solution is still viable within my plugin.

            – Aravona
            Jan 29 at 9:29











          Your Answer








          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "110"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fwordpress.stackexchange.com%2fquestions%2f326959%2fgutenberg-disallow-certain-custom-blocks-but-keep-all-core-blocks%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          2 Answers
          2






          active

          oldest

          votes








          2 Answers
          2






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          5














          AFAIK there is only one way to remove blocks from Gutenberg - you have to use allowed_block_types filter.



          Unfortunately Gutenberg developers are not very familiar with WordPress hooks and filters, so they created a little monster with this one. So instead of passing a list of core blocks in there, they pass true to enable all blocks. That way you're unable to obtain the list of all blocks registered.



          So if you want to disable just one block, then you have to get all blocks bu yourself...



          Here's the list of core blocks:




          • core/shortcode

          • core/image

          • core/gallery

          • core/heading

          • core/quote

          • core/embed

          • core/list

          • core/separator

          • core/more

          • core/button

          • core/pullquote

          • core/table

          • core/preformatted

          • core/code

          • core/html

          • core/freeform

          • core/latest-posts

          • core/categories

          • core/cover-image

          • core/text-columns

          • core/verse

          • core/video

          • core/audio

          • core/block

          • core/paragraph


          • core-embed/twitter


          • core-embed/youtube

          • core-embed/facebook

          • core-embed/instagram

          • core-embed/wordpress

          • core-embed/soundcloud

          • core-embed/spotify

          • core-embed/flickr

          • core-embed/vimeo

          • core-embed/animoto

          • core-embed/cloudup

          • core-embed/collegehumor

          • core-embed/dailymotion

          • core-embed/funnyordie

          • core-embed/hulu

          • core-embed/imgur

          • core-embed/issuu

          • core-embed/kickstarter

          • core-embed/meetup-com

          • core-embed/mixcloud

          • core-embed/photobucket

          • core-embed/polldaddy

          • core-embed/reddit

          • core-embed/reverbnation

          • core-embed/screencast

          • core-embed/scribd

          • core-embed/slideshare

          • core-embed/smugmug

          • core-embed/speaker

          • core-embed/ted

          • core-embed/tumblr

          • core-embed/videopress

          • core-embed/wordpress-tv


          On the other hand...



          It's a lot easier to unregister given block in JS... In there you can use:



          wp.blocks.unregisterBlockType( 'core/verse' );





          share|improve this answer
























          • Quite the list! I appreciate the effort getting it. It is frustrating there is not a better hook from the Gutenberg developers - thank you for the answer.

            – Aravona
            Jan 29 at 9:31











          • Totally agree on that. It should be possible to get list of all registered blocks with PHP...

            – Krzysiek Dróżdż
            Jan 29 at 9:41
















          5














          AFAIK there is only one way to remove blocks from Gutenberg - you have to use allowed_block_types filter.



          Unfortunately Gutenberg developers are not very familiar with WordPress hooks and filters, so they created a little monster with this one. So instead of passing a list of core blocks in there, they pass true to enable all blocks. That way you're unable to obtain the list of all blocks registered.



          So if you want to disable just one block, then you have to get all blocks bu yourself...



          Here's the list of core blocks:




          • core/shortcode

          • core/image

          • core/gallery

          • core/heading

          • core/quote

          • core/embed

          • core/list

          • core/separator

          • core/more

          • core/button

          • core/pullquote

          • core/table

          • core/preformatted

          • core/code

          • core/html

          • core/freeform

          • core/latest-posts

          • core/categories

          • core/cover-image

          • core/text-columns

          • core/verse

          • core/video

          • core/audio

          • core/block

          • core/paragraph


          • core-embed/twitter


          • core-embed/youtube

          • core-embed/facebook

          • core-embed/instagram

          • core-embed/wordpress

          • core-embed/soundcloud

          • core-embed/spotify

          • core-embed/flickr

          • core-embed/vimeo

          • core-embed/animoto

          • core-embed/cloudup

          • core-embed/collegehumor

          • core-embed/dailymotion

          • core-embed/funnyordie

          • core-embed/hulu

          • core-embed/imgur

          • core-embed/issuu

          • core-embed/kickstarter

          • core-embed/meetup-com

          • core-embed/mixcloud

          • core-embed/photobucket

          • core-embed/polldaddy

          • core-embed/reddit

          • core-embed/reverbnation

          • core-embed/screencast

          • core-embed/scribd

          • core-embed/slideshare

          • core-embed/smugmug

          • core-embed/speaker

          • core-embed/ted

          • core-embed/tumblr

          • core-embed/videopress

          • core-embed/wordpress-tv


          On the other hand...



          It's a lot easier to unregister given block in JS... In there you can use:



          wp.blocks.unregisterBlockType( 'core/verse' );





          share|improve this answer
























          • Quite the list! I appreciate the effort getting it. It is frustrating there is not a better hook from the Gutenberg developers - thank you for the answer.

            – Aravona
            Jan 29 at 9:31











          • Totally agree on that. It should be possible to get list of all registered blocks with PHP...

            – Krzysiek Dróżdż
            Jan 29 at 9:41














          5












          5








          5







          AFAIK there is only one way to remove blocks from Gutenberg - you have to use allowed_block_types filter.



          Unfortunately Gutenberg developers are not very familiar with WordPress hooks and filters, so they created a little monster with this one. So instead of passing a list of core blocks in there, they pass true to enable all blocks. That way you're unable to obtain the list of all blocks registered.



          So if you want to disable just one block, then you have to get all blocks bu yourself...



          Here's the list of core blocks:




          • core/shortcode

          • core/image

          • core/gallery

          • core/heading

          • core/quote

          • core/embed

          • core/list

          • core/separator

          • core/more

          • core/button

          • core/pullquote

          • core/table

          • core/preformatted

          • core/code

          • core/html

          • core/freeform

          • core/latest-posts

          • core/categories

          • core/cover-image

          • core/text-columns

          • core/verse

          • core/video

          • core/audio

          • core/block

          • core/paragraph


          • core-embed/twitter


          • core-embed/youtube

          • core-embed/facebook

          • core-embed/instagram

          • core-embed/wordpress

          • core-embed/soundcloud

          • core-embed/spotify

          • core-embed/flickr

          • core-embed/vimeo

          • core-embed/animoto

          • core-embed/cloudup

          • core-embed/collegehumor

          • core-embed/dailymotion

          • core-embed/funnyordie

          • core-embed/hulu

          • core-embed/imgur

          • core-embed/issuu

          • core-embed/kickstarter

          • core-embed/meetup-com

          • core-embed/mixcloud

          • core-embed/photobucket

          • core-embed/polldaddy

          • core-embed/reddit

          • core-embed/reverbnation

          • core-embed/screencast

          • core-embed/scribd

          • core-embed/slideshare

          • core-embed/smugmug

          • core-embed/speaker

          • core-embed/ted

          • core-embed/tumblr

          • core-embed/videopress

          • core-embed/wordpress-tv


          On the other hand...



          It's a lot easier to unregister given block in JS... In there you can use:



          wp.blocks.unregisterBlockType( 'core/verse' );





          share|improve this answer













          AFAIK there is only one way to remove blocks from Gutenberg - you have to use allowed_block_types filter.



          Unfortunately Gutenberg developers are not very familiar with WordPress hooks and filters, so they created a little monster with this one. So instead of passing a list of core blocks in there, they pass true to enable all blocks. That way you're unable to obtain the list of all blocks registered.



          So if you want to disable just one block, then you have to get all blocks bu yourself...



          Here's the list of core blocks:




          • core/shortcode

          • core/image

          • core/gallery

          • core/heading

          • core/quote

          • core/embed

          • core/list

          • core/separator

          • core/more

          • core/button

          • core/pullquote

          • core/table

          • core/preformatted

          • core/code

          • core/html

          • core/freeform

          • core/latest-posts

          • core/categories

          • core/cover-image

          • core/text-columns

          • core/verse

          • core/video

          • core/audio

          • core/block

          • core/paragraph


          • core-embed/twitter


          • core-embed/youtube

          • core-embed/facebook

          • core-embed/instagram

          • core-embed/wordpress

          • core-embed/soundcloud

          • core-embed/spotify

          • core-embed/flickr

          • core-embed/vimeo

          • core-embed/animoto

          • core-embed/cloudup

          • core-embed/collegehumor

          • core-embed/dailymotion

          • core-embed/funnyordie

          • core-embed/hulu

          • core-embed/imgur

          • core-embed/issuu

          • core-embed/kickstarter

          • core-embed/meetup-com

          • core-embed/mixcloud

          • core-embed/photobucket

          • core-embed/polldaddy

          • core-embed/reddit

          • core-embed/reverbnation

          • core-embed/screencast

          • core-embed/scribd

          • core-embed/slideshare

          • core-embed/smugmug

          • core-embed/speaker

          • core-embed/ted

          • core-embed/tumblr

          • core-embed/videopress

          • core-embed/wordpress-tv


          On the other hand...



          It's a lot easier to unregister given block in JS... In there you can use:



          wp.blocks.unregisterBlockType( 'core/verse' );






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Jan 28 at 17:50









          Krzysiek DróżdżKrzysiek Dróżdż

          17.5k63146




          17.5k63146













          • Quite the list! I appreciate the effort getting it. It is frustrating there is not a better hook from the Gutenberg developers - thank you for the answer.

            – Aravona
            Jan 29 at 9:31











          • Totally agree on that. It should be possible to get list of all registered blocks with PHP...

            – Krzysiek Dróżdż
            Jan 29 at 9:41



















          • Quite the list! I appreciate the effort getting it. It is frustrating there is not a better hook from the Gutenberg developers - thank you for the answer.

            – Aravona
            Jan 29 at 9:31











          • Totally agree on that. It should be possible to get list of all registered blocks with PHP...

            – Krzysiek Dróżdż
            Jan 29 at 9:41

















          Quite the list! I appreciate the effort getting it. It is frustrating there is not a better hook from the Gutenberg developers - thank you for the answer.

          – Aravona
          Jan 29 at 9:31





          Quite the list! I appreciate the effort getting it. It is frustrating there is not a better hook from the Gutenberg developers - thank you for the answer.

          – Aravona
          Jan 29 at 9:31













          Totally agree on that. It should be possible to get list of all registered blocks with PHP...

          – Krzysiek Dróżdż
          Jan 29 at 9:41





          Totally agree on that. It should be possible to get list of all registered blocks with PHP...

          – Krzysiek Dróżdż
          Jan 29 at 9:41













          4














          There's a whitelist blocks removal example from the Gutenberg Handbook:



          var allowedBlocks = [
          'core/paragraph',
          'core/image',
          'core/html',
          'core/freeform'
          ];

          wp.blocks.getBlockTypes().forEach( function( blockType ) {
          if ( allowedBlocks.indexOf( blockType.name ) === -1 ) {
          wp.blocks.unregisterBlockType( blockType.name );
          }
          } );


          One might try to modify it to remove blocks that do not start with core and are not part of allowedExtraBlocks (untested):



          var allowedExtraBlocks = [
          'my-plugin/block-example-1',
          'my-plugin/block-example-2'
          ];

          wp.blocks.getBlockTypes().forEach( function( blockType ) {
          if ( ! blockType.name.startsWith( 'core' )
          && allowedExtraBlocks.indexOf( blockType.name ) === -1
          ) {
          wp.blocks.unregisterBlockType( blockType.name );
          }
          } );


          One could adjust this further to match block names that start with core/ or core-embed/ instead of core to be more precise.



          The blacklist example wraps it with:



          wp.domReady( function() {
          // ...
          } );


          so this might be needed for the whitelist example too.





          Here's a quick way to see available blocks on the editing page, in the browser's console:



          In the 5.1 version there are 70 core blocks available, according to



          wp.blocks.getBlockTypes().length;


          number of core blocks



          The list of available block names:



          wp.blocks.getBlockTypes().forEach( function( blockType ){ console.log( blockType.name ); }); 


          block names



          Here's a table of available blocks:



          console.table( wp.blocks.getBlockTypes() );


          Table of available blocks






          share|improve this answer





















          • 1





            The part I really don’t like in this code is that it’s on JS side. It would be nice to be able to restrict this on PHP side... :(

            – Krzysiek Dróżdż
            Jan 28 at 20:42











          • It would be nice to have a PHP version, maybe one could look further at WP_Block_Type_Registry::get_instance()->get_all_registered() within the allowed_block_types filter callback, but it will probably not show all blocks there. @KrzysiekDróżdż

            – birgire
            Jan 28 at 20:46








          • 2





            No, it does not. I’ve already created a ticket with such enhancement in trac

            – Krzysiek Dróżdż
            Jan 28 at 20:48






          • 2





            Thanks for this answer! I agree with @KrzysiekDróżdż that it's frustrating there is no PHP solution to this as it stands. I appreciate the answer though and a JS solution is still viable within my plugin.

            – Aravona
            Jan 29 at 9:29
















          4














          There's a whitelist blocks removal example from the Gutenberg Handbook:



          var allowedBlocks = [
          'core/paragraph',
          'core/image',
          'core/html',
          'core/freeform'
          ];

          wp.blocks.getBlockTypes().forEach( function( blockType ) {
          if ( allowedBlocks.indexOf( blockType.name ) === -1 ) {
          wp.blocks.unregisterBlockType( blockType.name );
          }
          } );


          One might try to modify it to remove blocks that do not start with core and are not part of allowedExtraBlocks (untested):



          var allowedExtraBlocks = [
          'my-plugin/block-example-1',
          'my-plugin/block-example-2'
          ];

          wp.blocks.getBlockTypes().forEach( function( blockType ) {
          if ( ! blockType.name.startsWith( 'core' )
          && allowedExtraBlocks.indexOf( blockType.name ) === -1
          ) {
          wp.blocks.unregisterBlockType( blockType.name );
          }
          } );


          One could adjust this further to match block names that start with core/ or core-embed/ instead of core to be more precise.



          The blacklist example wraps it with:



          wp.domReady( function() {
          // ...
          } );


          so this might be needed for the whitelist example too.





          Here's a quick way to see available blocks on the editing page, in the browser's console:



          In the 5.1 version there are 70 core blocks available, according to



          wp.blocks.getBlockTypes().length;


          number of core blocks



          The list of available block names:



          wp.blocks.getBlockTypes().forEach( function( blockType ){ console.log( blockType.name ); }); 


          block names



          Here's a table of available blocks:



          console.table( wp.blocks.getBlockTypes() );


          Table of available blocks






          share|improve this answer





















          • 1





            The part I really don’t like in this code is that it’s on JS side. It would be nice to be able to restrict this on PHP side... :(

            – Krzysiek Dróżdż
            Jan 28 at 20:42











          • It would be nice to have a PHP version, maybe one could look further at WP_Block_Type_Registry::get_instance()->get_all_registered() within the allowed_block_types filter callback, but it will probably not show all blocks there. @KrzysiekDróżdż

            – birgire
            Jan 28 at 20:46








          • 2





            No, it does not. I’ve already created a ticket with such enhancement in trac

            – Krzysiek Dróżdż
            Jan 28 at 20:48






          • 2





            Thanks for this answer! I agree with @KrzysiekDróżdż that it's frustrating there is no PHP solution to this as it stands. I appreciate the answer though and a JS solution is still viable within my plugin.

            – Aravona
            Jan 29 at 9:29














          4












          4








          4







          There's a whitelist blocks removal example from the Gutenberg Handbook:



          var allowedBlocks = [
          'core/paragraph',
          'core/image',
          'core/html',
          'core/freeform'
          ];

          wp.blocks.getBlockTypes().forEach( function( blockType ) {
          if ( allowedBlocks.indexOf( blockType.name ) === -1 ) {
          wp.blocks.unregisterBlockType( blockType.name );
          }
          } );


          One might try to modify it to remove blocks that do not start with core and are not part of allowedExtraBlocks (untested):



          var allowedExtraBlocks = [
          'my-plugin/block-example-1',
          'my-plugin/block-example-2'
          ];

          wp.blocks.getBlockTypes().forEach( function( blockType ) {
          if ( ! blockType.name.startsWith( 'core' )
          && allowedExtraBlocks.indexOf( blockType.name ) === -1
          ) {
          wp.blocks.unregisterBlockType( blockType.name );
          }
          } );


          One could adjust this further to match block names that start with core/ or core-embed/ instead of core to be more precise.



          The blacklist example wraps it with:



          wp.domReady( function() {
          // ...
          } );


          so this might be needed for the whitelist example too.





          Here's a quick way to see available blocks on the editing page, in the browser's console:



          In the 5.1 version there are 70 core blocks available, according to



          wp.blocks.getBlockTypes().length;


          number of core blocks



          The list of available block names:



          wp.blocks.getBlockTypes().forEach( function( blockType ){ console.log( blockType.name ); }); 


          block names



          Here's a table of available blocks:



          console.table( wp.blocks.getBlockTypes() );


          Table of available blocks






          share|improve this answer















          There's a whitelist blocks removal example from the Gutenberg Handbook:



          var allowedBlocks = [
          'core/paragraph',
          'core/image',
          'core/html',
          'core/freeform'
          ];

          wp.blocks.getBlockTypes().forEach( function( blockType ) {
          if ( allowedBlocks.indexOf( blockType.name ) === -1 ) {
          wp.blocks.unregisterBlockType( blockType.name );
          }
          } );


          One might try to modify it to remove blocks that do not start with core and are not part of allowedExtraBlocks (untested):



          var allowedExtraBlocks = [
          'my-plugin/block-example-1',
          'my-plugin/block-example-2'
          ];

          wp.blocks.getBlockTypes().forEach( function( blockType ) {
          if ( ! blockType.name.startsWith( 'core' )
          && allowedExtraBlocks.indexOf( blockType.name ) === -1
          ) {
          wp.blocks.unregisterBlockType( blockType.name );
          }
          } );


          One could adjust this further to match block names that start with core/ or core-embed/ instead of core to be more precise.



          The blacklist example wraps it with:



          wp.domReady( function() {
          // ...
          } );


          so this might be needed for the whitelist example too.





          Here's a quick way to see available blocks on the editing page, in the browser's console:



          In the 5.1 version there are 70 core blocks available, according to



          wp.blocks.getBlockTypes().length;


          number of core blocks



          The list of available block names:



          wp.blocks.getBlockTypes().forEach( function( blockType ){ console.log( blockType.name ); }); 


          block names



          Here's a table of available blocks:



          console.table( wp.blocks.getBlockTypes() );


          Table of available blocks







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Jan 29 at 10:34

























          answered Jan 28 at 20:35









          birgirebirgire

          53.6k463143




          53.6k463143








          • 1





            The part I really don’t like in this code is that it’s on JS side. It would be nice to be able to restrict this on PHP side... :(

            – Krzysiek Dróżdż
            Jan 28 at 20:42











          • It would be nice to have a PHP version, maybe one could look further at WP_Block_Type_Registry::get_instance()->get_all_registered() within the allowed_block_types filter callback, but it will probably not show all blocks there. @KrzysiekDróżdż

            – birgire
            Jan 28 at 20:46








          • 2





            No, it does not. I’ve already created a ticket with such enhancement in trac

            – Krzysiek Dróżdż
            Jan 28 at 20:48






          • 2





            Thanks for this answer! I agree with @KrzysiekDróżdż that it's frustrating there is no PHP solution to this as it stands. I appreciate the answer though and a JS solution is still viable within my plugin.

            – Aravona
            Jan 29 at 9:29














          • 1





            The part I really don’t like in this code is that it’s on JS side. It would be nice to be able to restrict this on PHP side... :(

            – Krzysiek Dróżdż
            Jan 28 at 20:42











          • It would be nice to have a PHP version, maybe one could look further at WP_Block_Type_Registry::get_instance()->get_all_registered() within the allowed_block_types filter callback, but it will probably not show all blocks there. @KrzysiekDróżdż

            – birgire
            Jan 28 at 20:46








          • 2





            No, it does not. I’ve already created a ticket with such enhancement in trac

            – Krzysiek Dróżdż
            Jan 28 at 20:48






          • 2





            Thanks for this answer! I agree with @KrzysiekDróżdż that it's frustrating there is no PHP solution to this as it stands. I appreciate the answer though and a JS solution is still viable within my plugin.

            – Aravona
            Jan 29 at 9:29








          1




          1





          The part I really don’t like in this code is that it’s on JS side. It would be nice to be able to restrict this on PHP side... :(

          – Krzysiek Dróżdż
          Jan 28 at 20:42





          The part I really don’t like in this code is that it’s on JS side. It would be nice to be able to restrict this on PHP side... :(

          – Krzysiek Dróżdż
          Jan 28 at 20:42













          It would be nice to have a PHP version, maybe one could look further at WP_Block_Type_Registry::get_instance()->get_all_registered() within the allowed_block_types filter callback, but it will probably not show all blocks there. @KrzysiekDróżdż

          – birgire
          Jan 28 at 20:46







          It would be nice to have a PHP version, maybe one could look further at WP_Block_Type_Registry::get_instance()->get_all_registered() within the allowed_block_types filter callback, but it will probably not show all blocks there. @KrzysiekDróżdż

          – birgire
          Jan 28 at 20:46






          2




          2





          No, it does not. I’ve already created a ticket with such enhancement in trac

          – Krzysiek Dróżdż
          Jan 28 at 20:48





          No, it does not. I’ve already created a ticket with such enhancement in trac

          – Krzysiek Dróżdż
          Jan 28 at 20:48




          2




          2





          Thanks for this answer! I agree with @KrzysiekDróżdż that it's frustrating there is no PHP solution to this as it stands. I appreciate the answer though and a JS solution is still viable within my plugin.

          – Aravona
          Jan 29 at 9:29





          Thanks for this answer! I agree with @KrzysiekDróżdż that it's frustrating there is no PHP solution to this as it stands. I appreciate the answer though and a JS solution is still viable within my plugin.

          – Aravona
          Jan 29 at 9:29


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to WordPress Development Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fwordpress.stackexchange.com%2fquestions%2f326959%2fgutenberg-disallow-certain-custom-blocks-but-keep-all-core-blocks%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Human spaceflight

          Can not write log (Is /dev/pts mounted?) - openpty in Ubuntu-on-Windows?

          張江高科駅