{"id":228231,"date":"2022-10-17T10:48:00","date_gmt":"2022-10-17T07:48:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228231"},"modified":"2022-11-09T01:24:51","modified_gmt":"2022-11-08T22:24:51","slug":"zarejestruj-szablon-bloku-dla-edytora-blokow-wordpress-gutenberg","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/zarejestruj-szablon-bloku-dla-edytora-blokow-wordpress-gutenberg\/","title":{"rendered":"Zarejestruj szablon bloku dla edytora blok\u00f3w WordPress (Gutenberg)"},"content":{"rendered":"\n<p>W moim poprzednim poradniku bada\u0142em <a href=\"https:\/\/wholesomecode.ltd\/guides\/register-block-pattern-wordpress-gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">si\u0142\u0119 wzor\u00f3w blokowych<\/a>. Szablony blok\u00f3w s\u0105 podobne, ale zamiast polega\u0107 na kliencie, kt\u00f3ry wstawi wzorce blok\u00f3w do edytora, daje im pe\u0142ny uk\u0142ad, gdy tylko wstawi\u0105 nowy post.<\/p>\n<h2>Warunki wst\u0119pne<\/h2>\n<ul>\n<li>Instalacja WordPress<\/li>\n<li>Edytor kodu<\/li>\n<\/ul>\n<h2>Stw\u00f3rz sw\u00f3j szablon bloku<\/h2>\n<p>W tym przyk\u0142adzie zamierzam wstawi\u0107 ten sam <a href=\"https:\/\/wholesomecode.ltd\/guides\/register-block-pattern-wordpress-gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wz\u00f3r blokowy, kt\u00f3ry stworzy\u0142em w moim poprzednim przewodniku<\/a>, ale jako szablon blokowy.<\/p>\n<p>W tym przewodniku skopiowali\u015bmy kod HTML wyj\u015bcia edytora. W tym przewodniku zrobimy co\u015b nieco innego i zbudujemy tablic\u0119 przestrzeni nazw blok\u00f3w, w\u0142a\u015bciwo\u015bci i tre\u015bci.<\/p>\n<p>W swojej najprostszej formie szablon blokowy wygl\u0105da troch\u0119 tak:<\/p>\n<pre><code>$block_template = [\n  [ 'core\/heading', [ 'level'   =&gt; 2, 'content' =&gt; 'Example Block Template' ] ],\n  [ 'core\/paragraph', [ 'content' =&gt; 'Lorem ipsum dolor sit amet labore cras venenatis.' ] ],\n];\n<\/code><\/pre>\n<p>Jak wida\u0107, jest to tablica, kt\u00f3ra zawiera bloki w nast\u0119puj\u0105cym wzorze:<\/p>\n<ul>\n<li>Blokuj przestrze\u0144 nazw<\/li>\n<li>Atrybuty blokowe<\/li>\n<\/ul>\n<p>Chcemy jednak u\u017cy\u0107 zagnie\u017cd\u017conych blok\u00f3w, wi\u0119c przeka\u017cemy trzeci parametr do tej tablicy blok\u00f3w, czyli innerBlocks.<\/p>\n<p><strong>Chcesz tylko umie\u015bci\u0107 blok?<\/strong><\/p>\n<p>Zauwa\u017c, \u017ce mo\u017cesz pozostawi\u0107 puste atrybuty, aby po prostu zapewni\u0107 bloki bez ustawionej zawarto\u015bci.<\/p>\n<p>Tablica do utworzenia tego samego bloku, kt\u00f3ry utworzyli\u015bmy w przewodniku po wzorcach blok\u00f3w, potrzebujemy bardziej z\u0142o\u017conej tablicy, takiej jak:<\/p>\n<pre><code>$block_template = [\n  [\n    'core\/group',\n    [],\n    [\n      [\n        'core\/heading',\n        [\n          'level'   =&gt; 2,\n          'content' =&gt; 'Example Block Template',\n        ]\n      ],\n      [\n        'core\/paragraph',\n        [\n          'content' =&gt; 'Lorem ipsum dolor sit amet labore cras venenatis.',\n        ]\n      ],\n      [\n        'core\/columns',\n        [],\n        [\n          [\n            'core\/column',\n            [],\n            [\n              [\n                'core\/heading',\n                [\n                  'level'   =&gt; 3,\n                  'content' =&gt; 'Sub Heading 1',\n                ]\n              ],\n              [\n                'core\/paragraph',\n                [\n                  'content' =&gt; 'Lorem ipsum dolor sit amet id erat aliquet diam ullamcorper tempus massa eleifend vivamus.',\n                ]\n              ],\n            ]\n          ],\n          [\n            'core\/column',\n            [],\n            [\n              [\n                'core\/heading',\n                [\n                  'level'   =&gt; 3,\n                  'content' =&gt; 'Sub Heading 2',\n                ]\n              ],\n              [\n                'core\/paragraph',\n                [\n                  'content' =&gt; 'Morbi augue cursus quam pulvinar eget volutpat suspendisse dictumst mattis id.',\n                ]\n              ],\n            ]\n          ],\n        ],\n      ],\n    ]\n  ]\n];\n<\/code><\/pre>\n<h2>Zarejestruj szablon bloku<\/h2>\n<h3>Rejestrowanie szablonu bloku dla istniej\u0105cego typu postu<\/h3>\n<p>Aby zarejestrowa\u0107 szablon bloku dla istniej\u0105cego typu postu (takiego jak <code>post<\/code>typ postu), mo\u017cesz u\u017cy\u0107 poni\u017cszego kodu, aby zast\u0105pi\u0107 obiekt typu postu.<\/p>\n<pre><code>function register_block_template() {\n\n    $post_type_object                = get_post_type_object( 'post' );\n    $post_type_object-&gt;template      = $block_template;\n    $post_type_object-&gt;template_lock = 'all';\n}\nadd_action( 'init', 'register_block_template' );\n<\/code><\/pre>\n<p>Ten kod po prostu ustawia szablon i (opcjonalnie) <code>[template_lock](https:\/\/wholesomecode.ltd\/#template-lock)<\/code>typ.<\/p>\n<p>Pe\u0142ny kod wygl\u0105da\u0142by tak:<\/p>\n<pre><code>function register_block_template() {\n    $block_template = [\n      [\n        'core\/group',\n        [],\n        [\n          [\n            'core\/heading',\n            [\n              'level'   =&gt; 2,\n              'content' =&gt; 'Example Block Template',\n            ]\n          ],\n          [\n            'core\/paragraph',\n            [\n              'content' =&gt; 'Lorem ipsum dolor sit amet labore cras venenatis.',\n            ]\n          ],\n          [\n            'core\/columns',\n            [],\n            [\n              [\n                'core\/column',\n                [],\n                [\n                  [\n                    'core\/heading',\n                    [\n                      'level'   =&gt; 3,\n                      'content' =&gt; 'Sub Heading 1',\n                    ]\n                  ],\n                  [\n                    'core\/paragraph',\n                    [\n                      'content' =&gt; 'Lorem ipsum dolor sit amet id erat aliquet diam ullamcorper tempus massa eleifend vivamus.',\n                    ]\n                  ],\n                ]\n              ],\n              [\n                'core\/column',\n                [],\n                [\n                  [\n                    'core\/heading',\n                    [\n                      'level'   =&gt; 3,\n                      'content' =&gt; 'Sub Heading 2',\n                    ]\n                  ],\n                  [\n                    'core\/paragraph',\n                    [\n                      'content' =&gt; 'Morbi augue cursus quam pulvinar eget volutpat suspendisse dictumst mattis id.',\n                    ]\n                  ],\n                ]\n              ],\n            ],\n          ],\n        ]\n      ]\n    ];\n\n    $post_type_object                = get_post_type_object( 'post' );\n    $post_type_object-&gt;template      = $block_template;\n    $post_type_object-&gt;template_lock = 'all';\n}\nadd_action( 'init', 'register_block_template' );\n<\/code><\/pre>\n<h3>Rejestrowanie szablonu bloku dla nowego typu postu<\/h3>\n<p>Je\u015bli rejestrujesz typ posta, mo\u017cesz przekaza\u0107 szablon do <code>template<\/code>argumentu <code>register_post_type<\/code>.<\/p>\n<p>Mo\u017cesz r\u00f3wnie\u017c przekaza\u0107 <code>[template_lock](https:\/\/wholesomecode.ltd\/#template-lock)<\/code>argument do <code>register_post_type<\/code>.<\/p>\n<h3>Blokada szablonu<\/h3>\n<p>Argument <code>template_lock<\/code>mo\u017ce zrobi\u0107 kilka rzeczy w zale\u017cno\u015bci od argumentu, kt\u00f3ry jest do niego przekazywany. S\u0105 one wymienione w <a href=\"https:\/\/developer.wordpress.org\/block-editor\/developers\/block-api\/block-templates\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">przewodniku rozwoju Gutenberga<\/a> jako:<\/p>\n<ul>\n<li><code>all<\/code>\u2014 zapobiega wszelkim operacjom. Nie mo\u017cna wstawia\u0107 nowych blok\u00f3w, przenosi\u0107 istniej\u0105cych ani usuwa\u0107 blok\u00f3w.<\/li>\n<li><code>insert<\/code>\u2014 zapobiega wstawianiu lub usuwaniu blok\u00f3w, ale umo\u017cliwia przenoszenie istniej\u0105cych blok\u00f3w.<\/li>\n<\/ul>\n<p><strong>Blokada szablonu nie dzia\u0142a na blokach zagnie\u017cd\u017conych<\/strong><\/p>\n<p>Blokada szablonu dzia\u0142a tylko na blokach najwy\u017cszego poziomu. Wykorzystaj to na swoj\u0105 korzy\u015b\u0107, tworz\u0105c uk\u0142ad, kt\u00f3ry ma sta\u0142e nag\u0142\u00f3wki, obrazy, akapity i obszar grupowania, w kt\u00f3rym klient mo\u017ce wstawi\u0107 dowoln\u0105 tre\u015b\u0107.<\/p>\n<p>Mo\u017cesz tak\u017ce <a href=\"https:\/\/wholesomecode.ltd\/guides\/template-innerblocks-wordpress-gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">utworzy\u0107 niestandardowy szablon zagnie\u017cd\u017conego bloku za pomoc\u0105 InnerBlocks<\/a>.<\/p>\n<p>Mo\u017cesz tak\u017ce <a href=\"https:\/\/wholesomecode.ltd\/#allowed-block-types\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ograniczy\u0107 bloki, kt\u00f3re mo\u017cesz wstawia\u0107 do niekt\u00f3rych typ\u00f3w post\u00f3w<\/a>.<\/p>\n<h2>U\u017cyj szablonu bloku<\/h2>\n<p>Aby u\u017cy\u0107 szablonu blokowego, po prostu utw\u00f3rz nowy post (lub niestandardowy typ posta w zale\u017cno\u015bci od tego, jak skonfigurowa\u0142e\u015b rzeczy). Szablon zostanie wstawiony i b\u0119dziesz mie\u0107 teraz na swojej stronie sta\u0142e obszary tre\u015bci.<\/p>\n<p>Wstawienie posta pokazuje szablon bloku<\/p>\n<p>Mo\u017cesz ograniczy\u0107 bloki dost\u0119pne dla r\u00f3\u017cnych typ\u00f3w post\u00f3w za pomoc\u0105 poni\u017cszego kodu.<\/p>\n<pre><code>function filter_allowed_block_types( $allowed_block_types, $post) {\n\n  if ($post-&gt;post_type !== 'post') {\n    return $allowed_block_types;\n  }\n\n  $allowed_block_types = [\n    'core\/column',\n    'core\/columns',\n    'core\/group',\n    'core\/heading',\n    'core\/paragraph',\n  ];\n\n  return $allowed_block_types;\n}\nadd_filter( 'allowed_block_types', 'filter_allowed_block_types', 10, 2 );\n<\/code><\/pre>\n<p>Powy\u017cszy kod ogranicza bloki dozwolone w <code>post<\/code>typie postu do nast\u0119puj\u0105cych:<\/p>\n<ul>\n<li>\n<p>Kolumna (<code>core\/column<\/code>)<\/p>\n<\/li>\n<li>\n<p>Kolumny (<code>core\/column<\/code>s)<\/p>\n<\/li>\n<li>\n<p>Grupa (<code>core\/group<\/code>)<\/p>\n<\/li>\n<li>\n<p>Nag\u0142\u00f3wek (<code>core\/heading<\/code>)<\/p>\n<\/li>\n<li>\n<p>Akapit (<code>core\/paragraph<\/code>)<\/p>\n<\/li>\n<li>\n<p>Potrzebujesz czego\u015b bardziej elastycznego? Spr\u00f3buj zamiast tego <a href=\"https:\/\/wholesomecode.ltd\/guides\/register-block-pattern-wordpress-gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">zarejestrowa\u0107 wz\u00f3r blokowy<\/a><\/p>\n<\/li>\n<li>\n<p>Potrzebujesz czego\u015b, co dotyczy blok\u00f3w podrz\u0119dnych? Spr\u00f3buj <a href=\"https:\/\/wholesomecode.ltd\/guides\/template-innerblocks-wordpress-gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">zarejestrowa\u0107 szablon InnerBlocks<\/a><\/p>\n<\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/wholesomecode.ltd\" class=\"external external_icon\">wholesomecode.ltd<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>W moim poprzednim poradniku bada\u0142em si\u0142\u0119 wzor\u00f3w blokowych. Szablony blok\u00f3w s\u0105 podobne, ale zamiast polega\u0107 na kliencie, aby wstawi\u0107 wzory blok\u00f3w do edytora, daje to&#8230;<\/p>\n","protected":false},"author":1,"featured_media":223608,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,897,929,866],"tags":[1169],"class_list":["post-228231","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-kod","category-tematy","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=228231"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228231\/revisions"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=228231"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=228231"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=228231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}