<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>create-block &#8211; Macな暮らし</title>
	<atom:link href="https://polo-web.com/category/create-block/feed/" rel="self" type="application/rss+xml" />
	<link>https://polo-web.com</link>
	<description></description>
	<lastBuildDate>Thu, 26 Feb 2026 00:56:02 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://polo-web.com/wp-content/uploads/2025/03/site-icon-150x150.png</url>
	<title>create-block &#8211; Macな暮らし</title>
	<link>https://polo-web.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Font Awesome のアイコンピッカーを作成｜create-block</title>
		<link>https://polo-web.com/create-an-icon-picker-for-font-awesome-with-create-block/</link>
		
		<dc:creator><![CDATA[polo-web]]></dc:creator>
		<pubDate>Sat, 31 May 2025 08:01:06 +0000</pubDate>
				<category><![CDATA[create-block]]></category>
		<guid isPermaLink="false">https://polo-web.com/?p=2919</guid>

					<description><![CDATA[Font Awesome&#38;nbsp;のアイコンを使ってアイコンピッカーを作成してみたい。分かりやすくするために簡単に３つのアイコンを作成することにす …]]></description>
										<content:encoded><![CDATA[
<p>Font Awesome&nbsp;のアイコンを使ってアイコンピッカーを作成してみたい。分かりやすくするために簡単に３つのアイコンを作成することにする。必要なら後は増やしていくだけ。</p>



<p>ここ（icon-picker.js）ではアイコンピッカーの動きとレイアウトをほとんど作ってしまっている。<br>従って後はこのファイルを読み込むだけの感じになる。</p>



<p>&lt;i class=&#8221;fa-solid fa-camera&#8221;&gt;</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="291" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2919-1024x291.png" alt="" class="wp-image-2924" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2919-1024x291.png 1024w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2919-300x85.png 300w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2919-768x219.png 768w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2919.png 1142w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>ダウンロードしたFont Awesomeファイル全てをfontawesomeディレクトリに入れている。</p>



<div class="hcb_wrap"><pre class="prism off-numbers lang-plain"><code>fontawesome-iconpicker //新規作成したプラグイン名
  ├── build
  ├── node_modules 
  ├── polo-multiple-block.php 
  ├── package-lock.json
  ├── package.json 
  ├── readme.txt
  └── src
   	   └── fontawesome-iconpicker //新規作成したプラグイン名
             ├── block.json
   		     ├── edit.js
   		     ├── editor.scss
   		     ├── index.js
   		     ├── save.js
   		     ├── style.scss
             └── view.js  
   	   └── components
             ├── icon-picker
                   ├── icon-picker.js
   		           └── icon-picker.scss
   		     ├── info
                   ├── info.js
   		           └── info.scss
             └── fontawesome 
                   ├── css
   		           ├── js
                        ├── fontawesome.js
                        ├── regular.js
   		                ├── brands.js
                        └── solid.js
   		           ├── sprites
   		           ├── less
   		           ├── metadata
   		           ├── scss
   		           ├── sprites
                   ├── svgs
                   └── webfonts</code></pre></div>



<p>以下の配列にFont Awesomeの出力用タグ&lt;i class=&#8221;fa-<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-ys-red-color">solid</mark> fa-<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-ys-red-color">camera</mark>&#8220;&gt;を使用している。<br>赤の部分が配列に入っている。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-file="icon-picker.js" data-lang="JavaScript"><code>const icons = [
    {
        name: &#39;solid&#39;,
        value: &#39;camera&#39;,
    },
    {
        name: &#39;regular&#39;,
        value: &#39;bell&#39;,
    },
    {
        name: &#39;solid&#39;,
        value: &#39;calendar&#39;,
    },
    {
        name: &#39;solid&#39;,
        value: &#39;unlock&#39;,
    },

];

import &#39;./icon-picker.scss&#39;;

const IconPicker = ({
    attrName,
    attrValue,
    setAttributes,
}) =&gt; {
    return (
        &lt;div className=&quot;icon-picker-wrapper&quot;&gt;
            &lt;h3&gt;選択されたアイコン&lt;/h3&gt;
            &lt;div className=&quot;section-icon&quot;&gt;
                &lt;span className={`dashicons dashicons-${attrValue}`}&gt;&lt;/span&gt;
            &lt;/div&gt;
            &lt;div className=&quot;icons-list&quot;&gt;
                {
                    icons && icons.map((icon, index) =&gt; {
                        return (
                            &lt;div key={index} className=&quot;icon-item&quot;&gt;
                                &lt;button className=&quot;icon-item-button&quot; onClick={() =&gt; setAttributes({
                                    [attrName]: icon.value
                                })}&gt;
                                    &lt;span className={`dashicons dashicons-${icon.value}`}&gt;&lt;/span&gt;
                                &lt;/button&gt;
                            &lt;/div&gt;
                        )
                    })
                } 
            &lt;/div&gt;
        &lt;/div&gt;   
    )
}


export default IconPicker;</code></pre></div>



<p><strong><span class="ystdb-inline--larger">icon-picker.scss</span></strong>：アイコンピッカーのスタイルを設定<br>インストールパス：/plugins/icon-picker/src/components/icon-picker/icon-picker.scss</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-file="icon-picker.scss" data-lang="SCSS"><code>.icons-list {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(37px, 1fr));
	width: 250px;
}
button.icon-item-button {
	padding: 7px;
	margin: 1.5px;
}</code></pre></div>



<p>block.json 14-20行目を追加</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="block.json" data-line="14-19"><code>{
	&quot;$schema&quot;: &quot;https://schemas.wp.org/trunk/block.json&quot;,
	&quot;apiVersion&quot;: 3,
	&quot;name&quot;: &quot;create-block/fontawesome-iconpicker&quot;,
	&quot;version&quot;: &quot;0.1.0&quot;,
	&quot;title&quot;: &quot;Fontawesome Iconpicker&quot;,
	&quot;category&quot;: &quot;widgets&quot;,
	&quot;icon&quot;: &quot;smiley&quot;,
	&quot;description&quot;: &quot;Example block scaffolded with Create Block tool.&quot;,
	&quot;example&quot;: {},
	&quot;supports&quot;: {
		&quot;html&quot;: false
	},
	&quot;attributes&quot;:{
		&quot;icon&quot;: {
			&quot;type&quot;: &quot;string&quot;,
			&quot;default&quot;: &quot;bell&quot;
		}
	},
	&quot;textdomain&quot;: &quot;fontawesome-iconpicker&quot;,
	&quot;editorScript&quot;: &quot;file:./index.js&quot;,
	&quot;editorStyle&quot;: &quot;file:./index.css&quot;,
	&quot;style&quot;: &quot;file:./style-index.css&quot;,
	&quot;viewScript&quot;: &quot;file:./view.js&quot;
}</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="edit.js"><code>import { __ } from &#39;@wordpress/i18n&#39;;

import { useBlockProps, InspectorControls } from &#39;@wordpress/block-editor&#39;;
import { PanelBody } from &#39;@wordpress/components&#39;;
import { Fragment } from &#39;@wordpress/element&#39;;
import IconPicker from &#39;../components/icon-picker/icon-picker&#39;;


export default function Edit({ attributes, setAttributes }) {

	const { icon } = attributes;

	return (
		&lt;Fragment&gt;
			&lt;InspectorControls&gt;
				&lt;PanelBody title={__(&#39;アイコンの選択&#39;, &#39;first-block&#39;)} initialOpen={false}&gt;
					&lt;IconPicker
						attrName=&quot;icon&quot;
						attrValue={icon}
						setAttributes={setAttributes}
					/&gt;
				&lt;/PanelBody&gt;
			&lt;/InspectorControls&gt;
			&lt;div {...useBlockProps()}&gt;
				&lt;p className=&quot;section-icon&quot;&gt;
					&lt;span className={`dashicons dashicons-${icon}`}&gt;&lt;/span&gt;
					{__(&#39;Icon Picker – edit.js からこんにちは！&#39;, &#39;icon-picker&#39;)}
				&lt;/p&gt;
			&lt;/div&gt;
		&lt;/Fragment&gt;
	);
}</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="editer.js"><code>.wp-block-create-block-fontawesome-iconpicker {
	border: 1px dotted #f00;
}</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="save.js"><code>import { useBlockProps } from &#39;@wordpress/block-editor&#39;;

export default function save({ attributes }) {

	const { icon } = attributes;

	return (
		&lt;div {...useBlockProps.save()}&gt;
			&lt;p className=&quot;section-icon&quot;&gt;
				&lt;span className={`dashicons dashicons-${icon}`}&gt;&lt;/span&gt;
				Icon Picker – save.js からこんにちは！
			&lt;/p&gt;
		&lt;/div&gt;
	);
}</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="style.scss"><code>.wp-block-create-block-fontawesome-iconpicker {
	background-color: #21759b;
	color: #fff;
	padding: 2px;
}</code></pre></div>



<p>これでアイコンピッカーとして作成されるが、クラス名をdashiconsから変更すると機能しない。多分、どこかでCSSでの設定があるのだと思うが勉強不足で良くわからない。</p>



<p>しかし、このdashiconsをそのまま使って、font awesomeのアイコンが表示されたので良しとする。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Font Awesome のアイコンを使う｜create-block</title>
		<link>https://polo-web.com/use-font-awesome-icons-in-create-block/</link>
		
		<dc:creator><![CDATA[polo-web]]></dc:creator>
		<pubDate>Fri, 30 May 2025 06:26:27 +0000</pubDate>
				<category><![CDATA[create-block]]></category>
		<guid isPermaLink="false">https://polo-web.com/?p=2912</guid>

					<description><![CDATA[Font Awesomeを自分のサイトにダウンロードして、以下に説明するSVG + JSを使用してプロジェクトにアイコンを取り込むことができる。 ブロック名 …]]></description>
										<content:encoded><![CDATA[
<p>Font Awesomeを自分のサイトにダウンロードして、以下に説明するSVG + JSを使用してプロジェクトにアイコンを取り込むことができる。</p>



<p>ブロック名：/Local-Polo/<strong><span class="ystdb-inline--larger">icon-display</span></strong></p>



<p>簡単にcreate-blockデフォルトの状態で頭にアイコンを入れてみる。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="842" height="62" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2912.png" alt="" class="wp-image-2917" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2912.png 842w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2912-300x22.png 300w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2912-768x57.png 768w" sizes="(max-width: 842px) 100vw, 842px" /></figure>



<p>create-blockでFont Awesome のアイコンを実際に使うにはどうしたら良いか。<br>ダウンローして、そのファイルをプラグインの中に入れるという工程になる。</p>



<p>svgファイルを直接入れる方法。<br>しかし、Font Awesome&nbsp;のアイコンは以下のような一般的な方法では表示されない。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>&lt;img src=&quot;your_svg_file.svg&quot; alt=&quot;SVG画像&quot; width=&quot;200&quot; height=&quot;100&quot;&gt;</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>&lt;object data=&quot;your_svg_file.svg&quot; type=&quot;image/svg+xml&quot; width=&quot;200&quot; height=&quot;100&quot;&gt;&lt;/object&gt;</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>svg id=&quot;logomark&quot; x=&quot;0px&quot; y=&quot;0px&quot; width=&quot;155px&quot; height=&quot;155px&quot; viewBox=&quot;0 0 155 155&quot; enable-background=&quot;new 0 0 155 155&quot;&gt;
  &lt;polygon id=&quot;logomark-polyline&quot; fill-rule=&quot;evenodd&quot; clip-rule=&quot;evenodd&quot; fill=&quot;#0CB9C7&quot; points=&quot;128.25,26 147.19,96.69 95.44,148.44 24.75,129.5 5.81,58.81 57.56,7.06 &quot;/&gt;
&lt;/svg&gt;</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>&lt;object type=&quot;image/svg+xml&quot; data=&quot;logomark.svg&quot; width=&quot;256&quot; height=&quot;256&quot;&gt;&lt;/object&gt;</code></pre></div>



<p>正式の方法で使うことにする。</p>



<h2 class="wp-block-heading">SVG + JS ファイルを使う方法</h2>



<p>公式説明サイト：<a href="https://docs.fontawesome.com/web/setup/host-yourself/svg-js">https://docs.fontawesome.com/web/setup/host-yourself/svg-js</a></p>



<p>ダウンロード先：<a href="https://fontawesome.com/download">https://fontawesome.com/download</a></p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="516" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2897-5-1024x516.png" alt="" class="wp-image-2898" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2897-5-1024x516.png 1024w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2897-5-300x151.png 300w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2897-5-768x387.png 768w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2897-5.png 1142w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading" id="set-up-with-svgjs">SVG + JSで設定する</h3>



<p><a href="https://fontawesome.com/download">Font Awesome Download</a>または<a href="https://docs.fontawesome.com/web/setup/packages/">パッケージ</a>の中には、必要なファイルがまとめて入っている。<br>/jsフォルダには、Font Awesomeのすべての<a href="https://docs.fontawesome.com/web/dig-deeper/styles/">ファミリー</a>（Classic、Sharp、Brands）のコアスタイル、ユーティリティ、アイコン、および<a href="https://docs.fontawesome.com/web/dig-deeper/styles/">スタイル</a>オプション（Solid、Regular、Light、Duotone、およびThin）が含まれている。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="676" height="285" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2897-4.png" alt="" class="wp-image-2899" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2897-4.png 676w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2897-4-300x126.png 300w" sizes="auto, (max-width: 676px) 100vw, 676px" /></figure>



<h3 class="wp-block-heading" id="add-font-awesome-files-to-your-project">ブロックにダウンロードした Font Awesome ファイルを配置する</h3>



<p>ダウンロードしたフォルダ名をfontawesomeと変更してsrc/icon-display/icon/fontawesomeのように作成する。この配置は別にどこでも良い。最終的にパスが通れば問題なし。<br>そして最初のテストでは全てのファイルをそのまま入れてやったが、最終的には使うファイルだけを入れれば良いことになる。</p>



<p>サイトにフォルダを作成して、その中に以下のファイルを入れる。</p>



<ul class="wp-block-list">
<li>/js/fontawesome.js</li>



<li>必要なスタイルのjsファイル（ここでは/js/brands.jsと/js/solid.jsを入れてみる）</li>
</ul>



<p>最低でもコアファイル/js/fontawesome.jsと、使用したい個々のスタイルのJSファイルを必ず含めること。<br>無料で使えるのはbrandsとsolidと説明にはあるがregularも使えた。</p>



<h3 class="wp-block-heading" id="reference-font-awesome-in-your-project">プロジェクトでFont Awesomeを参照</h3>



<p>create-blockの場合、edit.jsで以下のようにまずファイルをリンクする必要がある。<br>最後はfontawesome.jsとなるのだが、ここでは.jsはいらない。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-file="edit.js" data-lang="JavaScript"><code>import &#39;./icon/fontawesome/js/solid&#39;;
import &#39;./icon/fontawesome/js/brands&#39;;
import &#39;./icon/fontawesome/js/fontawesome&#39;;</code></pre></div>



<p>最後にfontawesome.jsローダーを参照することをお勧めするとのことなので一番下に記述した。<br>パスがファイルを配置した場所を正しく指していることを確認！</p>



<p>以下のようにedit.jsに入れる。４行目に入っているのがアイコン表示のためのスクリプトになる。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-lang="JavaScript" data-line="4"><code>export default function Edit() {
	return (
		&lt;p { ...useBlockProps() }&gt;
			&lt;i class=&quot;fa-solid fa-user&quot;&gt;&lt;/i&gt;
			{ __( &#39;Icon Display – ハロー editor!&#39;, &#39;icon-display&#39; ) }
		&lt;/p&gt;
	);
}</code></pre></div>



<p>&lt;i class=&#8221;fa-solid fa-user&#8221;&gt;この中でuserがsvgsフォルダの中にあるファイルuser.svgの名前になる。</p>



<p><strong>最終的なedit.js</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-file="edit.js" data-lang="JavaScript"><code>import { __ } from &#39;@wordpress/i18n&#39;;
import { useBlockProps } from &#39;@wordpress/block-editor&#39;;

import &#39;./editor.scss&#39;;
import &#39;./icon/fontawesome/js/fontawesome&#39;;
import &#39;./icon/fontawesome/js/solid&#39;;

export default function Edit() {
	return (
		&lt;p { ...useBlockProps() }&gt;
			&lt;i class=&quot;fa-solid fa-user&quot;&gt;&lt;/i&gt;
			{ __( &#39;Icon Display – ハロー editor!&#39;, &#39;icon-display&#39; ) }
		&lt;/p&gt;
	);
}</code></pre></div>



<p>このようにうまく入った。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="842" height="62" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2912-1.png" alt="" class="wp-image-2916" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2912-1.png 842w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2912-1-300x22.png 300w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2912-1-768x57.png 768w" sizes="auto, (max-width: 842px) 100vw, 842px" /></figure>



<p>入れる位置はどこでも良い &lt;i class=&#8221;fa-solid fa-user&#8221;&gt; を入れるだけである。</p>



<h2 class="wp-block-heading">カラーとサイズの設定</h2>



<p>以下の公式サイトで説明されているのですぐわかる。</p>



<p>説明サイト：<a href="https://docs.fontawesome.com/web/style/basics">https://docs.fontawesome.com/web/style/basics</a></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="184" height="64" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2897-2.png" alt="" class="wp-image-2906"/></figure>
</div>


<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>&lt;span style=&quot;font-size: 3em; color: Tomato;&quot;&gt;
  &lt;i class=&quot;fa-solid fa-camera&quot;&gt;&lt;/i&gt;
&lt;/span&gt;

&lt;span style=&quot;font-size: 48px; color: Dodgerblue;&quot;&gt;
  &lt;i class=&quot;fa-solid fa-camera&quot;&gt;&lt;/i&gt;
&lt;/span&gt;

&lt;span style=&quot;font-size: 3rem;&quot;&gt;
  &lt;span style=&quot;color: Mediumslateblue;&quot;&gt;
    &lt;i class=&quot;fa-solid fa-camera&quot;&gt;&lt;/i&gt;
  &lt;/span&gt;
&lt;/span&gt;</code></pre></div>



<p>こんな方法もある。fa-6xがフォントサイズになる数値が大きくなるほどアイコンが大きくなる。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="114" height="112" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2897-1.png" alt="" class="wp-image-2907"/></figure>
</div>


<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>&lt;i class=&quot;fa-solid fa-baby-carriage fa-6x&quot; style=&quot;color: tomato&quot;&gt;&lt;/i&gt;</code></pre></div>



<p>この他、以下のところでサイズやカラーのHTMLを確認することもできる。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="964" height="606" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2897.png" alt="" class="wp-image-2908" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2897.png 964w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2897-300x189.png 300w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2897-768x483.png 768w" sizes="auto, (max-width: 964px) 100vw, 964px" /></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>テキストを入力できるサイドバーのコントロール作成｜create-block</title>
		<link>https://polo-web.com/create-a-sidebar-control-that-allows-you-to-enter-text/</link>
		
		<dc:creator><![CDATA[polo-web]]></dc:creator>
		<pubDate>Wed, 28 May 2025 06:42:41 +0000</pubDate>
				<category><![CDATA[create-block]]></category>
		<guid isPermaLink="false">https://polo-web.com/?p=2876</guid>

					<description><![CDATA[TextControlを使ってサイドバーにテキストを入力するボックスを作成。 テキストコントロール：https://developer.wordpress. …]]></description>
										<content:encoded><![CDATA[
<p><strong>TextControl</strong>を使ってサイドバーにテキストを入力するボックスを作成。</p>



<p>テキストコントロール：<a href="https://developer.wordpress.org/block-editor/reference-guides/components/text-control/">https://developer.wordpress.org/block-editor/reference-guides/components/text-control/</a></p>



<p>こんな感じになる。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="286" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2876-1024x286.png" alt="" class="wp-image-2884" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2876-1024x286.png 1024w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2876-300x84.png 300w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2876-768x214.png 768w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2876.png 1140w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">TextControl</h2>



<p>TextControlコンポーネントを使用すると、テキストを入力して編集することができるようになる。</p>



<p>ブロック名：Local-Polo/<strong><span class="ystdb-inline--larger">text-contro</span>l</strong></p>



<h3 class="wp-block-heading">サイドバーの入力ボックスからテキストをコンテンツに入れる</h3>



<p>コンテンツに直接入力することは出来ない。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-json" data-file="block.json" data-lang="JSON"><code>{
	&quot;$schema&quot;: &quot;https://schemas.wp.org/trunk/block.json&quot;,
	&quot;apiVersion&quot;: 3,
	&quot;name&quot;: &quot;create-block/text-control&quot;,
	&quot;version&quot;: &quot;0.1.0&quot;,
	&quot;title&quot;: &quot;Text Control&quot;,
	&quot;category&quot;: &quot;widgets&quot;,
	&quot;icon&quot;: &quot;smiley&quot;,
	&quot;description&quot;: &quot;Example block scaffolded with Create Block tool.&quot;,
	&quot;example&quot;: {},
	&quot;supports&quot;: {
		&quot;html&quot;: false
	},
	&quot;attributes&quot;: {
		&quot;content&quot;: {
			&quot;type&quot;: &quot;string&quot;,
			&quot;default&quot;: &quot;テキストの入力...&quot;
		}
	},
	&quot;textdomain&quot;: &quot;text-control&quot;,
	&quot;editorScript&quot;: &quot;file:./index.js&quot;,
	&quot;editorStyle&quot;: &quot;file:./index.css&quot;,
	&quot;style&quot;: &quot;file:./style-index.css&quot;,
	&quot;viewScript&quot;: &quot;file:./view.js&quot;
}</code></pre></div>



<p>以下の23行目は content が入力（true）されているなら p タグ内の content に入れる、ということになる。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-file="edit.js" data-lang="JavaScript" data-line="23"><code>import { __ } from &#39;@wordpress/i18n&#39;;

import { useBlockProps, InspectorControls } from &#39;@wordpress/block-editor&#39;;
import { PanelBody, TextControl } from &#39;@wordpress/components&#39;;

import &#39;./editor.scss&#39;;

export default function Edit({ attributes, setAttributes }) {
	const { content } = attributes;

	return (
		&lt;&gt;
			&lt;InspectorControls&gt;
				&lt;PanelBody title=&quot;設定&quot; initialOpen={true}&gt;
					&lt;TextControl
						label=&quot;テキストの入力...&quot;
						value={content}
						onChange={(value) =&gt; setAttributes({ content: value })}
					/&gt;
				&lt;/PanelBody&gt;
			&lt;/InspectorControls&gt;
			&lt;div {...useBlockProps()}&gt;
				{content && &lt;p&gt;{content}&lt;/p&gt;}
			&lt;/div&gt;
		&lt;/&gt;
	);
}</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-file="save.js" data-lang="JavaScript"><code>import { useBlockProps } from &#39;@wordpress/block-editor&#39;;

export default function save({ attributes }) {
	const { content } = attributes;
	return (
		&lt;div {...useBlockProps.save()}&gt;
			{content && &lt;p&gt;{content}&lt;/p&gt;}
		&lt;/div&gt;
	);
}</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-file="editer.scss" data-lang="SCSS"><code>.wp-block-create-block-text-control {
	
}</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-file="style.scss" data-lang="SCSS"><code>.wp-block-create-block-text-control {
	background-color: #21759b;
	color: #fff;
	padding: 5px 20px;
}</code></pre></div>


<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://polo-web.com/wp-content/plugins/download-manager/assets/file-type-icons/zip.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://polo-web.com/download/text-control-zip/'>text-control.zip</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 88.39 MB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary btn-sm' rel='nofollow' href='#' data-downloadurl="https://polo-web.com/download/text-control-zip/?wpdmdl=2887&refresh=69fb3272579eb1778070130">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>１つのプラグインに複数のブロックをまとめる｜create-block</title>
		<link>https://polo-web.com/create-block-combine-multiple-blocks-into-one-plugin/</link>
		
		<dc:creator><![CDATA[polo-web]]></dc:creator>
		<pubDate>Fri, 23 May 2025 09:09:12 +0000</pubDate>
				<category><![CDATA[create-block]]></category>
		<guid isPermaLink="false">https://polo-web.com/?p=2641</guid>

					<description><![CDATA[create-blockで、簡単にプラグインのひな型ができるのはいいが、出来上がるブロックは一つしか出来ない。これを複数まとめてプラグインにするには？ ブロ …]]></description>
										<content:encoded><![CDATA[
<p>create-blockで、簡単にプラグインのひな型ができるのはいいが、出来上がるブロックは一つしか出来ない。<br>これを複数まとめてプラグインにするには？</p>



<p>ブロック名：<strong>polo-multiple-block</strong></p>



<p>WordPress v6.8.1 を使用<br>@wordpress/create-block@4.67.0を使用</p>



<p>このページで作成したファイルをダウンロード</p>


<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://polo-web.com/wp-content/plugins/download-manager/assets/file-type-icons/zip.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://polo-web.com/download/polo-multiple-block-zip/'>polo-multiple-block.zip</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 89 MB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary btn-sm' rel='nofollow' href='#' data-downloadurl="https://polo-web.com/download/polo-multiple-block-zip/?wpdmdl=2837&refresh=69fb3272605f11778070130">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div>



<p>仕上がりは以下のようになる。自分で作成したカテゴリーの中に、自作のブロックを複数入れる。<br>これは多くのプラグイン開発者が行なっている方法だと思う。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="333" height="306" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-22.png" alt="" class="wp-image-2642" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-22.png 333w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-22-300x276.png 300w" sizes="auto, (max-width: 333px) 100vw, 333px" /></figure>
</div>


<p>プラグインの開発は「<a href="https://localwp.com">Local</a>」というツールを使用している。手元にあるサーバーなのでアクセスが簡単だし、トラブルでも慌てることがないのでプラグイン開発には必須のアイテムだと思う。</p>



<p>ここで作成した</p>



<h2 class="wp-block-heading">まず @wordpress/create-block からスタート</h2>



<p>まず最初は複数のプラグインの全体のためのブロック名で以下のコマンドを実行する。<br>これはプラグインとして登録する名前「polo-multiple-block」になる。</p>



<p>もちろん名前は何でも良い、ここでは「<strong>polo-multiple-block</strong>」として始める。poloは私のサイトの愛称なので自分がわかりやすいように先頭につけた。</p>



<p>以下のコマンドの前に必ず cd でプラグインに移動しておく必要がある。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="772" height="110" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-19.png" alt="" class="wp-image-2648" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-19.png 772w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-19-300x43.png 300w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-19-768x109.png 768w" sizes="auto, (max-width: 772px) 100vw, 772px" /></figure>
</div>


<p>pluginsに移動できたら以下を実行する。</p>



<div class="hcb_wrap"><pre class="prism off-numbers lang-plain" data-show-lang="0"><code>npx @wordpress/create-block polo-multiple-block</code></pre></div>



<h2 class="wp-block-heading">出来上がったフォルダ構成を変更</h2>



<p>インストール後の各プラグインの構造は次のようになっているはずである。</p>



<div class="hcb_wrap"><pre class="prism off-numbers lang-plain"><code>polo-multiple-block //新規作成したプラグイン名
  ├── build
  ├── node_modules 
  ├── polo-multiple-block.php 
  ├── package-lock.json
  ├── package.json 
  ├── readme.txt
  └── src
   	   └── polo-multiple-block //新規作成したプラグイン名
             ├── block.json
   		     ├── edit.js
   		     ├── editor.scss
   		     ├── index.js
   		     ├── save.js
   		     ├── style.scss
             └── view.js</code></pre></div>



<h2 class="wp-block-heading">ブロックを有効にする</h2>



<p>ここでブロックが表示されるか確認するために <strong>Polo Multiple Block</strong> を有効にする。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="781" height="222" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-18.png" alt="" class="wp-image-2649" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-18.png 781w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-18-300x85.png 300w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-18-768x218.png 768w" sizes="auto, (max-width: 781px) 100vw, 781px" /></figure>



<p>ウィジェットにPolo Multiple Blockを確認表示できた。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="244" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-16-1024x244.png" alt="" class="wp-image-2654" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-16-1024x244.png 1024w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-16-300x72.png 300w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-16-768x183.png 768w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-16.png 1245w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">編集作業で <em>Visual Studio Code</em> を起動する</h2>



<p>編集には<em>Visual Studio Code</em>を使用している。このVSCを起動してプラグイン内にある「polo-multiple-block」の全てのファイルを開く。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="514" height="570" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-15.png" alt="" class="wp-image-2655" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-15.png 514w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-15-271x300.png 271w" sizes="auto, (max-width: 514px) 100vw, 514px" /></figure>
</div>


<p>VSCメニューから「ターミナル -&gt; 新しいターミナル」を選択。以下を実行しておく。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="521" height="100" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-14.png" alt="" class="wp-image-2656" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-14.png 521w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-14-300x58.png 300w" sizes="auto, (max-width: 521px) 100vw, 521px" /></figure>



<p class="has-gray-2-background-color has-background">npm start</p>



<h2 class="wp-block-heading">polo-blocks フォルダを作成する</h2>



<p>複数のブロックを入れるためのpolo-blocksフォルダを新しく作成する。</p>



<p>これは次のようにする。<br>srcフォルダの下にpolo-blocksフォルダを新しく作る。<br>先にできていた src の中にある polo-multiple-block のフォルダを中身が入ったまま、polo-blocksの中に入れる。<br><br>以下の通りになる。</p>



<div class="hcb_wrap"><pre class="prism off-numbers lang-plain" data-line="9, 10"><code>polo-multiple-block
  ├── build
  ├── node_modules 
  ├── polo-multiple-block.php  
  ├── package-lock.json
  ├── package.json 
  ├── readme.txt
  └── src
       └── polo-blocks //フォルダを新規作成
   	         └── polo-multiple-block 
                   ├── block.json 
   		           ├── edit.js
   		           ├── editor.scss
   		           ├── index.js
   		           ├── save.js
   		           └── style.scss</code></pre></div>



<p>この移動した時点でもブロックは表示される。</p>



<p>しかし、polo-blocksフォルダを作成して polo-multiple-blockフォルダを移動したら必ず以下の作業が必要になる。これをしないとパスがおかしくなるから。</p>



<h2 class="wp-block-heading">ここがポイント polo-blocks にパスを通すために polo-multiple-block.php 内の register_block_type を書き換える</h2>



<p>上で作成したpolo-blocksフォルダを使えるようにするためにこの設定が必要になる。</p>



<p>PHPファイルにはブロックを登録するPHPの関数があり、initというWordPressのアクションフックでこの関数が実行されるようになっている。</p>



<p>ここで２行目の<code>(glob(plugin_dir_path(FILE) . 'build/polo-blocks/*') as $block)</code>という部分は自分（polo-multiple-block.phpファイル）がいるディレクトリの中のbuildフォルダを指しているらしい。<br>そして、その中にblock.jsonというファイルがあれば、その内容に基づいてブロックを登録するという機能を果たしていて、これを複数のフォルダに対してその数だけ実行すれば複数のブロックが一度に登録されるという仕組みをつくっているらしい。この設定の後は何もしなくても自動的に書き直してくるのかな？</p>



<p>実際にどんなふうにコード書くかというと以下のようになるならしい。<br>polo-blocksとなっているところが新しく作成したpolo-blocksフォルダにあたる。これがポイント！</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="polo-multiple-block.php"><code>function create_block_polo_multiple_block_block_init() {
	foreach (glob(plugin_dir_path(__FILE__) . &#39;build/polo-blocks/*&#39;) as $block) {
		// Static block
		register_block_type($block);
	}
}
add_action( &#39;init&#39;, &#39;create_block_polo_multiple_block_block_init&#39; );</code></pre></div>



<p><code>glob(plugin_dir_path(__FILE__) . 'build/polo-blocks/*')</code>でbuild/polo-blocks内のフォルダ名が配列で渡るので、それをループで回してブロック登録を行うということらしい。<br>従って、これによりbuild/polo-blocks内にブロックを増やしていけば、登録されるブロックが増えていくことになる。</p>



<p><strong>polo-multiple-block.php の全ての内容</strong></p>



<p>パスとして&#8217;build/polo-blocks/*&#8217;が指定されているのが分かると思う。<br>関数内の最初に入れる必要がある。後の方に入れるとうまく動作しない。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="polo-multiple-block.php" data-line="24-27"><code>&lt;?php
/**
 * Plugin Name:       Polo Multiple Block
 * Description:       Example block scaffolded with Create Block tool.
 * Version:           0.1.0
 * Requires at least: 6.7
 * Requires PHP:      7.4
 * Author:            The WordPress Contributors
 * License:           GPL-2.0-or-later
 * License URI:       https://www.gnu.org/licenses/gpl-2.0.html
 * Text Domain:       polo-multiple-block
 *
 * @package CreateBlock
 */

if ( ! defined( &#39;ABSPATH&#39; ) ) {
	exit; // Exit if accessed directly.
}


function create_block_polo_multiple_block_block_init() {

	/* この部分を追加した */
	foreach (glob(plugin_dir_path(__FILE__) . &#39;build/polo-blocks/*&#39;) as $block) {
		// Static block
		register_block_type($block);
	}
	
	if ( function_exists( &#39;wp_register_block_types_from_metadata_collection&#39; ) ) {
		wp_register_block_types_from_metadata_collection( __DIR__ . &#39;/build&#39;, __DIR__ . &#39;/build/blocks-manifest.php&#39; );
		return;
	}

	if ( function_exists( &#39;wp_register_block_metadata_collection&#39; ) ) {
		wp_register_block_metadata_collection( __DIR__ . &#39;/build&#39;, __DIR__ . &#39;/build/blocks-manifest.php&#39; );
	}
	
	$manifest_data = require __DIR__ . &#39;/build/blocks-manifest.php&#39;;
	foreach ( array_keys( $manifest_data ) as $block_type ) {
		register_block_type( __DIR__ . &quot;/build/{$block_type}&quot; );
	}

}
add_action( &#39;init&#39;, &#39;create_block_polo_multiple_block_block_init&#39; );</code></pre></div>



<h2 class="wp-block-heading">この最初のブロックを fiest-block に変更する</h2>



<p>後に入れるブロック名と合わせるためにpolo-multiple-blockをfirst-blockに変更する。</p>



<div class="hcb_wrap"><pre class="prism off-numbers lang-plain" data-line="9, 10"><code>polo-multiple-block
  ├── build
  ├── node_modules 
  ├── polo-multiple-block.php  
  ├── package-lock.json
  ├── package.json 
  ├── readme.txt
  └── src
       └── polo-blocks
   	         └── first-block  //フォルダ名を変更した
                   ├── block.json 
   		           ├── edit.js
   		           ├── editor.scss
   		           ├── index.js
   		           ├── save.js
   		           └── style.scss</code></pre></div>



<p>ここでフォルダのブロック名を変更しても、実際のブロック名は変更されていない、そのままPolo Multiple Blockで表示されるので、First Blockと表示されるように変更しておく。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="121" height="99" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-12.png" alt="" class="wp-image-2671"/><figcaption class="wp-element-caption">変わっていない！</figcaption></figure>
</div>


<p>block.jsonで変更する。変更箇所は６行目を &#8220;title&#8221;: &#8220;First Block&#8221; に変更する。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="first-block/block.json" data-line="6"><code>{
	&quot;$schema&quot;: &quot;https://schemas.wp.org/trunk/block.json&quot;,
	&quot;apiVersion&quot;: 3,
	&quot;name&quot;: &quot;create-block/polo-multiple-block&quot;,
	&quot;version&quot;: &quot;0.1.0&quot;,
	&quot;title&quot;: &quot;First Block&quot;,
	&quot;category&quot;: &quot;widgets&quot;,
	&quot;icon&quot;: &quot;smiley&quot;,
	&quot;description&quot;: &quot;Example block scaffolded with Create Block tool.&quot;,
	&quot;example&quot;: {},
	&quot;supports&quot;: {
		&quot;html&quot;: false
	},
	&quot;textdomain&quot;: &quot;polo-multiple-block&quot;,
	&quot;editorScript&quot;: &quot;file:./index.js&quot;,
	&quot;editorStyle&quot;: &quot;file:./index.css&quot;,
	&quot;style&quot;: &quot;file:./style-index.css&quot;,
	&quot;viewScript&quot;: &quot;file:./view.js&quot;
}</code></pre></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="145" height="77" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-11.png" alt="" class="wp-image-2673"/><figcaption class="wp-element-caption">変わった！</figcaption></figure>
</div>


<p>これでFirst Blockという名前で実際のブロックも「widgets」に表示されるようになる。</p>



<p>この後、新しく追加するプラグインは全て「polo-blocks」に入れることになる。<br>そして <em>Visual Studio Code</em> の編集画面ではファイルの構造が自動的に更新されて表示される。</p>



<h2 class="wp-block-heading">２番目以降のブロックの入れ方</h2>



<p>ここで create-block の &#8211;no-plugin を利用して、新しく作った「polo-blocks」フォルダの中に２番目以降のブロック追加していく。<br>この&#8211;no-pluginによる追加ブロックは src より上のファイルを入れないで src 内の単体ブロックのみを作成することになる。</p>



<p>２つ目のブロックを直接「polo-blocks」フォルダへインストールするために、ターミナルでsrc内の新しく作成した「polo-blocks」フォルダへcdで移動、その後以下のコマンドを実行。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="850" height="87" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-13.png" alt="" class="wp-image-2657" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-13.png 850w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-13-300x31.png 300w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-13-768x79.png 768w" sizes="auto, (max-width: 850px) 100vw, 850px" /></figure>



<div class="hcb_wrap"><pre class="prism off-numbers lang-plain"><code>npx @wordpress/create-block second-block --no-plugin</code></pre></div>



<p>これで「blocks」内に新しい「second-block」が作成される。<br>以下のように非常にシンプルなファイル構成になる。従ってインストールも早い！</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="933" height="202" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-20.png" alt="" class="wp-image-2646" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-20.png 933w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-20-300x65.png 300w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-20-768x166.png 768w" sizes="auto, (max-width: 933px) 100vw, 933px" /></figure>



<p>フォルダとファイルが追加され、以下のように構造になっているのを確認。</p>



<div class="hcb_wrap"><pre class="prism off-numbers lang-plain"><code>polo-multiple-block
├── build
├── node_modules 
├── polo-multiple-block.php  
├── package-lock.json
├── package.json 
├── readme.txt
└── src
	└── polo-blocks 
		└── first-block
              ├── block.json  
			  ├── edit.js 
			  ├── editor.scss　
			  ├── index.js
			  ├── save.js
              ├── style.scss
			  └── view.js
		└── second-block     //npx --no-plugin 実行で作成されたフォルダとファイル
              ├── block.json
			  ├── edit.js 
			  ├── editor.scss　
			  ├── index.js
			  ├── save.js
              ├── style.scss
			  └── view.js</code></pre></div>



<p>これで１つの「polo-multiple-block」という名前のプラグインに２つ目の内蔵されたブロックが作成されたことになる。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="242" height="128" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-10.png" alt="" class="wp-image-2674"/></figure>
</div>


<p>　これは「polo-multiple-block」という名前のプラグインを１つインストールすると２つのブロックが追加されたことになる。</p>



<h2 class="wp-block-heading">カスタムカテゴリーの作成</h2>



<p>よく見るように、このプラグイン専用のカテゴリーを作成したい。</p>



<p>カテゴリーは普通だとblock.jsonでそのまま指定するだけだが、独自のカテゴリーの場合、他の設定が必要になる。デフォルト以外のカテゴリーを設定すると「未分類」と表示される。</p>



<p>カスタムカテゴリーは polo-multiple-block.php に以下を追加するだけ。<br>８行目titleに「Polo Block」のように希望のカテゴリー名を入れるだけ。<a href="https://developer.wordpress.org/block-editor/reference-guides/filters/block-filters/#managing-block-categories">Block Filters説明サイト</a></p>



<p>ここでは「Polo Block」としているが、実際に表示されるのは全て大文字になる。</p>



<p class="has-ys-red-color has-text-color has-link-color wp-elements-bc6e67b6ea6515a59c26654096034748"><span class="ystdb-inline--smaller">この作業はその後のblock.jsonの設定まで続けてやらないと実行されないので注意！</span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="polo-multiple-block.php"><code>function polo_new_block_category( $block_categories ) {

	$block_categories[] = array(
		&#39;slug&#39; =&gt; &#39;polo-custom-category&#39;,
		&#39;title&#39; =&gt; &#39;Polo Blocks&#39;,
		&#39;icon&#39; =&gt; null,
	);
	return $block_categories;

}
add_filter( &#39;block_categories_all&#39;, &#39;polo_new_block_category&#39; );</code></pre></div>



<p><strong><span class="ystdb-inline--larger">first-blockのblock.jsonを修正する</span></strong></p>



<p>後はblock.jsonのカテゴリーに上で設定したslugのcustom-categoryを各block.jsonのカテゴリーに以下のように入れるだけ。</p>



<p>上の７行目slugのpolo-custom-categoryを下のblock.jsonファイルに&#8221;category&#8221;: &#8220;polo-custom-category&#8221;と入れる。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="first-block/block.json" data-line="7"><code>{
	&quot;$schema&quot;: &quot;https://schemas.wp.org/trunk/block.json&quot;,
	&quot;apiVersion&quot;: 3,
	&quot;name&quot;: &quot;create-block/polo-multiple-block&quot;,
	&quot;version&quot;: &quot;0.1.0&quot;,
	&quot;title&quot;: &quot;Polo Multiple Block&quot;,
	&quot;category&quot;: &quot;polo-custom-category&quot;,
	&quot;icon&quot;: &quot;smiley&quot;,
	&quot;description&quot;: &quot;Example block scaffolded with Create Block tool.&quot;,
	&quot;example&quot;: {},
	&quot;supports&quot;: {
		&quot;html&quot;: false
	},
	&quot;textdomain&quot;: &quot;polo-multiple-block&quot;,
	&quot;editorScript&quot;: &quot;file:./index.js&quot;,
	&quot;editorStyle&quot;: &quot;file:./index.css&quot;,
	&quot;style&quot;: &quot;file:./style-index.css&quot;,
	&quot;viewScript&quot;: &quot;file:./view.js&quot;
}</code></pre></div>



<p><strong><span class="ystdb-inline--larger">同じくsecond-blockも同じように修正する</span></strong></p>



<p>７行目を&#8221;polo-custom-category&#8221;に変更する。<br>first-blockと全く同じ作業で、後追加する場合も同じように修正していけば同じカテゴリーに次々と追加されることになる。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="second-block/block.json" data-line="7"><code>{
	&quot;$schema&quot;: &quot;https://schemas.wp.org/trunk/block.json&quot;,
	&quot;apiVersion&quot;: 3,
	&quot;name&quot;: &quot;create-block/second-block&quot;,
	&quot;version&quot;: &quot;0.1.0&quot;,
	&quot;title&quot;: &quot;Second Block&quot;,
	&quot;category&quot;: &quot;polo-custom-category&quot;,
	&quot;icon&quot;: &quot;smiley&quot;,
	&quot;description&quot;: &quot;Example block scaffolded with Create Block tool.&quot;,
	&quot;example&quot;: {},
	&quot;supports&quot;: {
		&quot;html&quot;: false
	},
	&quot;textdomain&quot;: &quot;second-block&quot;,
	&quot;editorScript&quot;: &quot;file:./index.js&quot;,
	&quot;editorStyle&quot;: &quot;file:./index.css&quot;,
	&quot;style&quot;: &quot;file:./style-index.css&quot;,
	&quot;viewScript&quot;: &quot;file:./view.js&quot;
}</code></pre></div>



<p>これでPOLO BLOCKというカスタムカテゴリーに２つのブロックが登録されたことになる。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="331" height="166" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-17.png" alt="" class="wp-image-2653" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-17.png 331w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-17-300x150.png 300w" sizes="auto, (max-width: 331px) 100vw, 331px" /></figure>
</div>


<h2 class="wp-block-heading">カテゴリーの入る位置を指定する、ブロックカテゴリの並べ替え</h2>



<p>最初のままだと一番下に表示された、一番先頭に表示するには？</p>



<p>既に入れているpolo-multiple-block.phpのfunction polo_new_block_category( $block_categories )のところを以下のファイルと入れ替える。</p>



<p>変更前：</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>function polo_new_block_category( $block_categories ) {

	$block_categories[] = array(
		&#39;slug&#39; =&gt; &#39;polo-custom-category&#39;,
		&#39;title&#39; =&gt; &#39;Polo Blocks&#39;,
		&#39;icon&#39; =&gt; null,
	);
	return $block_categories;

}
add_filter( &#39;block_categories_all&#39;, &#39;polo_new_block_category&#39; );</code></pre></div>



<p>上の箇所を削除して、下のファイル全部をそのまま入れる。</p>



<p>13行目の$position = 0; にすると一番最初に表示されるようになる。<br>他の人も同じ設定ならどうなるのかが不明。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="polo-multiple-block.php" data-line="13"><code>function polo_new_block_category( $cats ) {

	// 任意のインデックスを持つ新しい配列要素を作成する
	$new = array(
		&#39;literallyanything&#39; =&gt; array(
			&#39;slug&#39;  =&gt; &#39;polo-custom-category&#39;,
			&#39;title&#39; =&gt; &#39;Polo Blocks&#39;,
			&#39;icon&#39; =&gt; null,
		)
	);

	// ここでカスタムカテゴリを表示する位置を決める
	$position = 0; // もし2なら – テキストとメディアの後なので、技術的には3番目の位置？
	$cats = array_slice( $cats, 0, $position, true ) + $new + array_slice( $cats, $position, null, true );

	// 配列のインデックスをリセットする
	$cats = array_values( $cats );

	return $cats;
}
add_filter( &#39;block_categories_all&#39;, &#39;polo_new_block_category&#39; );</code></pre></div>



<p>以下のように先頭に入った。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="912" height="356" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-9.png" alt="" class="wp-image-2676" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-9.png 912w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-9-300x117.png 300w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-9-768x300.png 768w" sizes="auto, (max-width: 912px) 100vw, 912px" /></figure>



<h2 class="wp-block-heading">ビルドする</h2>



<p>ビルドするときはmy-blockディレクトリで実行すること、それ以外だとエラーになる。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="745" height="85" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-8.png" alt="" class="wp-image-2680" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-8.png 745w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-8-300x34.png 300w" sizes="auto, (max-width: 745px) 100vw, 745px" /></figure>



<p class="has-gray-2-background-color has-background">npm run build</p>



<p>webpack 5.99.9 compiled <strong>successfully</strong> in 797 ms と出ると正常にコンパイルされたことになる。</p>



<p>上記のコマンドで srcフォルダ内の最適化されたファイルを build/ フォルダに生成することになる。（JavaScript と CSS の最適化（圧縮や不要部分の削除））</p>



<h2 class="wp-block-heading">次に以下のコマンドでZIP を書き出す</h2>



<p><code>polo-multiple-block.php</code>（プラグインのメインファイル）や&nbsp;<code>build/</code>&nbsp;内の最適化済みファイルを ZIP 化する。</p>



<p class="has-gray-2-background-color has-background">npm run plugin-zip</p>



<p>Done. <code>polo-multiple-block.zip</code> is ready!　と出たら完了。<br>zipファイルは作成したプラグインの中に出力されている。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="880" height="348" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-7.png" alt="" class="wp-image-2683" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-7.png 880w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-7-300x119.png 300w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-7-768x304.png 768w" sizes="auto, (max-width: 880px) 100vw, 880px" /></figure>



<p>ここで一度貴重な経験をしたのは、このブロックをインストールするとき同じ名前のカスタムカテゴリーが他にあった場合、エラーになるということ。<br>インストールまでは問題なくいくが、有効化するときに「重大なエラーが発生した」となる。同じカテゴリー名で自分が作成したブロックが先に有効になっていると、このエラーになる。注意！</p>



<h2 class="wp-block-heading">ブロックのカスタムアイコンの作成</h2>



<p>WordPressのダッシュアイコンだとblock.jsonのアイコンで簡単に設定できる。</p>



<p>ダッシュアイコン：<a href="https://developer.wordpress.org/resource/dashicons/#pets">https://developer.wordpress.org/resource/dashicons/#pets</a></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="322" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-6-1024x322.png" alt="" class="wp-image-2692" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-6-1024x322.png 1024w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-6-300x94.png 300w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-6-768x242.png 768w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-6.png 1150w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>上の右の「pets」をコピーして</p>



<p>アイコンの登録は通常block.jsonに以下のようにダッシュアイコンなら簡単n登録できる。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>&quot;icon&quot;: &quot;pets&quot;,</code></pre></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="324" height="149" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-5.png" alt="" class="wp-image-2693" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-5.png 324w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-5-300x138.png 300w" sizes="auto, (max-width: 324px) 100vw, 324px" /></figure>
</div>


<p>しかしオリジナルアイコンはblock.jsonでは登録することはできない。</p>



<p>まず、作成したアイコンが必要、しかし一から作るのは面倒なので、ここではテストということなので<a href="https://fontawesome.com/search" target="_blank" rel="noreferrer noopener">FontAwesome</a>からフリーのSVGをダウンロードすることにする。</p>



<p>必ずSVG形式を選択。</p>



<h2 class="wp-block-heading">ブロックのアイコンとして FontAwesome アイコンを使う</h2>



<p><a href="https://fontawesome.com/search" target="_blank" rel="noreferrer noopener">FontAwesome</a>からSVGを選択してその下をコピーする。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="985" height="601" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-4.png" alt="" class="wp-image-2695" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-4.png 985w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-4-300x183.png 300w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-4-768x469.png 768w" sizes="auto, (max-width: 985px) 100vw, 985px" /></figure>



<p>コードをコピーする</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 640 512&quot;&gt;&lt;!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--&gt;&lt;path d=&quot;M48 0C21.5 0 0 21.5 0 48L0 368c0 26.5 21.5 48 48 48l16 0c0 53 43 96 96 96s96-43 96-96l128 0c0 53 43 96 96 96s96-43 96-96l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64 0-32 0-18.7c0-17-6.7-33.3-18.7-45.3L512 114.7c-12-12-28.3-18.7-45.3-18.7L416 96l0-48c0-26.5-21.5-48-48-48L48 0zM416 160l50.7 0L544 237.3l0 18.7-128 0 0-96zM112 416a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm368-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96z&quot;/&gt;&lt;/svg&gt;</code></pre></div>



<p>コメントなど不要な部分を削除&lt;!&#8211;! 〜 &#8211;&gt;はいらない。以下が削除する部分。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>&lt;!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--&gt;</code></pre></div>



<p>次にblock.jsonのアイコン設定部分を削除。</p>



<p>index.jsに移動して、以下を作成、最後のコンマを忘れずにエラーになる。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>icon : {
src : &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 640 512&quot;&gt;
&lt;path d=&quot;M48 0C21.5 0 0 21.5 0 48L0 368c0 26.5 21.5 48 48 48l16 0c0 53 43 96 96 96s96-43 96-96l128 0c0 53 43 96 96 96s96-43 96-96l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64 0-32 0-18.7c0-17-6.7-33.3-18.7-45.3L512 114.7c-12-12-28.3-18.7-45.3-18.7L416 96l0-48c0-26.5-21.5-48-48-48L48 0zM416 160l50.7 0L544 237.3l0 18.7-128 0 0-96zM112 416a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm368-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96z&quot;/&gt;&lt;/svg&gt;
},</code></pre></div>



<p><strong>以下がindex.jsでの全てのファイルになる。</strong></p>



<p>ここではfirst-block/index.jsでのブロックアイコンの変更設定になる。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="first-block/index.js" data-line="10-14"><code>import { registerBlockType } from &#39;@wordpress/blocks&#39;;

import &#39;./style.scss&#39;;

import Edit from &#39;./edit&#39;;
import save from &#39;./save&#39;;
import metadata from &#39;./block.json&#39;;

registerBlockType(metadata.name, {
	icon: {
		src: &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 640 512&quot;&gt;
			&lt;path d=&quot;M48 0C21.5 0 0 21.5 0 48L0 368c0 26.5 21.5 48 48 48l16 0c0 53 43 96 96 96s96-43 96-96l128 0c0 53 43 96 96 96s96-43 96-96l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64 0-32 0-18.7c0-17-6.7-33.3-18.7-45.3L512 114.7c-12-12-28.3-18.7-45.3-18.7L416 96l0-48c0-26.5-21.5-48-48-48L48 0zM416 160l50.7 0L544 237.3l0 18.7-128 0 0-96zM112 416a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm368-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96z&quot; /&gt;
		&lt;/svg&gt;
	},

	edit: Edit,
	save,
});</code></pre></div>



<p>説明ではblock.jsonの&#8221;icon&#8221;: &#8220;smiley&#8221;を削除すること、とあったがそのまま入れた状態でもエラーにはならないし、アイコンも問題なく表示されるようになった。上書きされるようだ。<br>しかし一応消しておいた方が良いかも。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="331" height="154" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-3.png" alt="" class="wp-image-2696" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-3.png 331w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-3-300x140.png 300w" sizes="auto, (max-width: 331px) 100vw, 331px" /></figure>
</div>


<h2 class="wp-block-heading">アイコンの大きさと色を変更するには</h2>



<p>ここviewBoxで、アイコンの大きさと色も替えることができる。大きさは多分そのままが一番いいのではと思うので多分変更する必要はないはずである。</p>



<p class="has-gray-2-background-color has-background">&lt;svg xmlns=&#8221;http://www.w3.org/2000/svg&#8221; viewBox=&#8221;0 0 640 512&#8243;&gt;</p>



<p>viewBoxの中の４つの数値でコントロール。<br>よく分からないが最初の数字は左右の位置を調整できる？、右に行くにはプラス左はマイナスの数値を入れる。２番目は上下？３番目はアイコンを入れるボックスの天地の大きさ？最後は横幅？も少し調べる必要があるが、そんなに大きさを気にする必要は無いかも。参考までに</p>



<p><strong>色を変更する</strong></p>



<p>5行目に以下のように追加するだけ</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="index.js" data-line="5"><code>icon: {
		src: &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;24&quot; height=&quot;24&quot; viewBox=&quot;0 0 640 512&quot;&gt;
			&lt;path d=&quot;M48 0C21.5 0 0 21.5 0 48L0 368c0 26.5 21.5 48 48 48l16 0c0 53 43 96 96 96s96-43 96-96l128 0c0 53 43 96 96 96s96-43 96-96l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64 0-32 0-18.7c0-17-6.7-33.3-18.7-45.3L512 114.7c-12-12-28.3-18.7-45.3-18.7L416 96l0-48c0-26.5-21.5-48-48-48L48 0zM416 160l50.7 0L544 237.3l0 18.7-128 0 0-96zM112 416a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm368-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96z&quot; /&gt;
		&lt;/svg&gt;,
		foreground : &#39;#fe0000&#39;
	},</code></pre></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="334" height="144" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-2.png" alt="" class="wp-image-2702" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-2.png 334w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-2-300x129.png 300w" sizes="auto, (max-width: 334px) 100vw, 334px" /><figcaption class="wp-element-caption">赤色のアイコンになった</figcaption></figure>
</div>


<h2 class="wp-block-heading">カテゴリーのタイトルの横にアイコンを入れる</h2>



<p>polo-multiple-block.phpの一部だがこの中の8行目、iconのnullのところにダッシュアイコンを入れる。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="polo-multiple-block.php" data-line="8"><code>	$new = array(
		&#39;literallyanything&#39; =&gt; array(
			&#39;slug&#39;  =&gt; &#39;polo-custom-category&#39;,
			&#39;title&#39; =&gt; &#39;Polo Blocks&#39;,
			&#39;icon&#39; =&gt; null,
		)
	);</code></pre></div>



<p><strong>アイコンを入れたpolo-multiple-block.php全ファイル</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="polo-multiple-block.php" data-line="55"><code>&lt;?php
/**
 * Plugin Name:       Polo Multiple Block
 * Description:       Example block scaffolded with Create Block tool.
 * Version:           0.1.0
 * Requires at least: 6.7
 * Requires PHP:      7.4
 * Author:            The WordPress Contributors
 * License:           GPL-2.0-or-later
 * License URI:       https://www.gnu.org/licenses/gpl-2.0.html
 * Text Domain:       polo-multiple-block
 *
 * @package CreateBlock
 */

if ( ! defined( &#39;ABSPATH&#39; ) ) {
	exit; // Exit if accessed directly.
}



function create_block_polo_multiple_block_block_init() {

	/* この部分を追加した */
	foreach (glob(plugin_dir_path(__FILE__) . &#39;build/polo-blocks/*&#39;) as $block) {
		// Static block
		register_block_type($block);
	}
	
	if ( function_exists( &#39;wp_register_block_types_from_metadata_collection&#39; ) ) {
		wp_register_block_types_from_metadata_collection( __DIR__ . &#39;/build&#39;, __DIR__ . &#39;/build/blocks-manifest.php&#39; );
		return;
	}

	if ( function_exists( &#39;wp_register_block_metadata_collection&#39; ) ) {
		wp_register_block_metadata_collection( __DIR__ . &#39;/build&#39;, __DIR__ . &#39;/build/blocks-manifest.php&#39; );
	}
	
	$manifest_data = require __DIR__ . &#39;/build/blocks-manifest.php&#39;;
	foreach ( array_keys( $manifest_data ) as $block_type ) {
		register_block_type( __DIR__ . &quot;/build/{$block_type}&quot; );
	}

}
add_action( &#39;init&#39;, &#39;create_block_polo_multiple_block_block_init&#39; );


/* この部分を追加した */
function polo_new_block_category( $cats ) {

	// 任意のインデックスを持つ新しい配列要素を作成する
	$new = array(
		&#39;literallyanything&#39; =&gt; array(
			&#39;slug&#39;  =&gt; &#39;polo-custom-category&#39;,
			&#39;title&#39; =&gt; &#39;Polo Blocks&#39;,
			&#39;icon&#39; =&gt; &#39;smiley&#39;,
		)
	);

	// ここでカスタムカテゴリを表示する位置を決める
	$position = 0; // もし2なら – テキストとメディアの後なので、技術的には3番目の位置？
	$cats = array_slice( $cats, 0, $position, true ) + $new + array_slice( $cats, $position, null, true );

	// 配列のインデックスをリセットする
	$cats = array_values( $cats );

	return $cats;
}
add_filter( &#39;block_categories_all&#39;, &#39;polo_new_block_category&#39; );</code></pre></div>



<p>アイコンが追加された。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="327" height="195" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-1.png" alt="" class="wp-image-2703" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-1.png 327w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2641-1-300x179.png 300w" sizes="auto, (max-width: 327px) 100vw, 327px" /></figure>
</div>


<h2 class="wp-block-heading">自作のアイコンを使いたい場合もあると思う</h2>



<p>この作り方を説明したサイトはいっぱいあるので、そちらを参考に。</p>



<p>参考サイト：<a href="https://www.vektor-inc.co.jp/post/wordpress-block-variation/">https://www.vektor-inc.co.jp/post/wordpress-block-variation/</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>HTML「表示/非表示」の設定 &#8211; create-block</title>
		<link>https://polo-web.com/html-show-hide-setting-create-block/</link>
		
		<dc:creator><![CDATA[polo-web]]></dc:creator>
		<pubDate>Tue, 20 May 2025 00:27:11 +0000</pubDate>
				<category><![CDATA[create-block]]></category>
		<guid isPermaLink="false">https://polo-web.com/?p=2609</guid>

					<description><![CDATA[ブロック名：my-first-block（このブロック名は無視） HTML「表示/非表示」とはブロックをHTMLで表示するかどうかの設定になる。以下がHTM …]]></description>
										<content:encoded><![CDATA[
<p>ブロック名：<strong><span class="ystdb-inline--larger">my-first-block</span></strong>（このブロック名は無視）</p>



<p>HTML「表示/非表示」とはブロックをHTMLで表示するかどうかの設定になる。<br>以下がHTMLを表示した状態。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="790" height="197" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2609-1.png" alt="" class="wp-image-2666" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2609-1.png 790w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2609-1-300x75.png 300w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2609-1-768x192.png 768w" sizes="auto, (max-width: 790px) 100vw, 790px" /></figure>



<p>create-block コマンドで生成された block.json の supports プロパティの&nbsp;<a href="https://ja.wordpress.org/team/handbook/block-editor/reference-guides/block-api/block-supports/#html" target="_blank" rel="noreferrer noopener">html</a>&nbsp;プロパティはデフォルトでは false になっている。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="272" height="111" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2609-4.png" alt="" class="wp-image-2610"/></figure>
</div>


<p>この例では html プロパティの値を true に変更している、必要に応じて変更（false に戻す）。</p>



<p>html プロパティは「HTMLとして編集」を使用するかどうかの設定。<br>「false」にすると、ブロックのオプションに「HTMLとして編集」が下の画像の左側のように表示されない、「true」にすると右側のように表示されるようになる。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="828" height="599" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2609-2.png" alt="" class="wp-image-2665" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2609-2.png 828w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2609-2-300x217.png 300w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2609-2-768x556.png 768w" sizes="auto, (max-width: 828px) 100vw, 828px" /></figure>



<p>最初と同じ画像だが「HTMLとして編集」を選択すると、以下のようにブロックのHTML構造が表示されるようになる。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="790" height="197" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2609.png" alt="" class="wp-image-2667" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2609.png 790w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2609-300x75.png 300w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2609-768x192.png 768w" sizes="auto, (max-width: 790px) 100vw, 790px" /></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>create-block 色々な設定項目のヒント</title>
		<link>https://polo-web.com/create-block-hints-for-various-configuration-items/</link>
		
		<dc:creator><![CDATA[polo-web]]></dc:creator>
		<pubDate>Mon, 19 May 2025 07:20:01 +0000</pubDate>
				<category><![CDATA[create-block]]></category>
		<guid isPermaLink="false">https://polo-web.com/?p=2594</guid>

					<description><![CDATA[ビルド ビルド用コマンドは、最終的に本番環境に入れる用の圧縮されたファイルを作成するために使用、普段は開発用コマンドを使用する。 開発用コマンド npm r …]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">ビルド</h2>



<p>ビルド用コマンドは、最終的に本番環境に入れる用の圧縮されたファイルを作成するために使用、普段は開発用コマンドを使用する。</p>



<p>開発用コマンド</p>



<pre class="wp-block-code has-gray-2-background-color has-background"><code>npm run start</code></pre>



<p>ビルドコマンド</p>



<pre class="wp-block-code"><code>npm run build</code></pre>



<p>正常にコンパイルされたと出る。そのビルドされたファイルをプラグインにインストールするとエラーになる。</p>



<p>WordPressのプラグインとしてリリースする場合は、<code>npm run plugin-zip</code>を実行します。<br>事前に<code>npm run build</code>を実行して<code>build</code>フォルダにビルド済みのファイルを作成しておきましょう。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>npm run build
npm run plugin-zip</code></pre></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>アイコン付きの囲み枠の作成</title>
		<link>https://polo-web.com/creating-a-box-with-an-icon/</link>
		
		<dc:creator><![CDATA[polo-web]]></dc:creator>
		<pubDate>Mon, 19 May 2025 05:40:35 +0000</pubDate>
				<category><![CDATA[create-block]]></category>
		<guid isPermaLink="false">https://polo-web.com/?p=2586</guid>

					<description><![CDATA[こんな感じの枠を作成。 ブロック名：frame-block ここまでの完成形ファイル。できれば左のアイコンとテキストを天地中心に入れたいがうまくいかない。そ …]]></description>
										<content:encoded><![CDATA[
<p>こんな感じの枠を作成。</p>



<p>ブロック名：<strong><span class="ystdb-inline--larger">frame-block</span></strong></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="829" height="186" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2586.png" alt="" class="wp-image-2587" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2586.png 829w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2586-300x67.png 300w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2586-768x172.png 768w" sizes="auto, (max-width: 829px) 100vw, 829px" /></figure>



<p>ここまでの完成形ファイル。できれば左のアイコンとテキストを天地中心に入れたいがうまくいかない。その他はなんとかなった。</p>



<p>ここでの設定で左のアイコンの下、Note!をRitchテキストで濃ゆく表示する方法で作成している。<br>それと共にRitchテキストを複数設置したのでそのやり方もやっている。同じ条件でRitchテキストを２つ以上設定すると必ず問題が起こるはずである。</p>



<p>後はフォントサイズ、テキストと線の色、背景色、線のスタイルを設定できるようになっている。</p>



<h2 class="wp-block-heading">WordPressのダッシュアイコンを使ったアイコンの表示</h2>



<p> アイコン（dashicons）の取得先：<a href="https://developer.wordpress.org/resource/dashicons/">https://developer.wordpress.org/resource/dashicons/</a></p>



<p><strong>以下が全てうまく行ったファイルになる。</strong></p>



<p>26と32行目がポイントでRitchテキストを複数使う場合、どのRitchテキストが対象になっているかを示さなければない。<br>一般的にRitchテキストの説明が１つだけの場合が多いのであんまり問題にならないが、２つ以上になるとどのRitchテキストなのか分からないと混乱していまい、どれも同じように出力されてしまうという現象になるはずである。</p>



<p><strong>&#8220;selector&#8221;: &#8220;p.polo-caption&#8221;</strong>これはp タグの中のcaptionクラス名を指定している。これで同じpタグだと区別がつかないが、クラス名をつけることで区別されるようになる。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="block.json" data-line="26,　32"><code>{
	&quot;$schema&quot;: &quot;https://schemas.wp.org/trunk/block.json&quot;,
	&quot;apiVersion&quot;: 3,
	&quot;name&quot;: &quot;create-block/frame-block&quot;,
	&quot;version&quot;: &quot;0.1.0&quot;,
	&quot;title&quot;: &quot;枠囲み&quot;,
	&quot;category&quot;: &quot;widgets&quot;,
	&quot;icon&quot;: &quot;smiley&quot;,
	&quot;description&quot;: &quot;囲み枠で左にアイコン、右に段落を設定&quot;,
	&quot;example&quot;: {},
	&quot;supports&quot;: {
		&quot;html&quot;: true,
		&quot;color&quot;: {
			&quot;gradients&quot;: true
		},
		&quot;spacing&quot;: {
			&quot;margin&quot;: true,
			&quot;padding&quot;: true,
			&quot;blockGap&quot;: true
		}
	},
	&quot;attributes&quot;: {
		&quot;contentLeft&quot;: {
			&quot;type&quot;: &quot;string&quot;,
			&quot;source&quot;: &quot;text&quot;,
			&quot;selector&quot;: &quot;p.polo-caption&quot;,
			&quot;default&quot;: &quot;注意！&quot;	
		},
		&quot;contentRight&quot;: {
			&quot;type&quot;: &quot;string&quot;,
			&quot;source&quot;: &quot;text&quot;,
			&quot;selector&quot;: &quot;p.contentRight&quot;,
			&quot;default&quot;: &quot;テキストを入力してください ...&quot;
		},
		&quot;title&quot;: {
            &quot;type&quot;: &quot;string&quot;,
            &quot;selector&quot;: &quot;span&quot;,
            &quot;default&quot;: &quot;&quot;
        },
		&quot;border&quot;: {
			&quot;type&quot;: &quot;string&quot;,
			&quot;default&quot;: &quot;solid&quot;
		},
		&quot;borderWidth&quot;: {
			&quot;type&quot;: &quot;integer&quot;,
			&quot;default&quot;: 1
		},
		&quot;fontSize&quot;: {
			&quot;type&quot;: &quot;integer&quot;,
			&quot;default&quot;: 16
		},
		&quot;style&quot;: {
			&quot;type&quot;: &quot;object&quot;,
			&quot;default&quot;: {
				&quot;color&quot;: {
					&quot;text&quot;: &quot;#3a3a3a&quot;,
					&quot;background&quot;: &quot;#f3faf1&quot;
				}
			}
		}
	},
	&quot;textdomain&quot;: &quot;frame-block&quot;,
	&quot;editorScript&quot;: &quot;file:./index.js&quot;,
	&quot;editorStyle&quot;: &quot;file:./index.css&quot;,
	&quot;style&quot;: &quot;file:./style-index.css&quot;,
	&quot;viewScript&quot;: &quot;file:./view.js&quot;
}</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="edit.js"><code>import { __ } from &#39;@wordpress/i18n&#39;;

import { useBlockProps, RichText, InspectorControls, } from &quot;@wordpress/block-editor&quot;;
import { PanelBody, SelectControl } from &quot;@wordpress/components&quot;;
import NumberControl from &quot;./components/number-control&quot;;
import { Dashicon } from &#39;@wordpress/components&#39;;
import &#39;./editor.scss&#39;;

export default function Edit({ attributes, setAttributes }) {

	//各要素の初期化
	const { border, borderWidth, fontSize } = attributes;
	const columnStyles = { border, borderWidth, fontSize };

	//各要素の変化した時の初期化
	const onChangeContentLeft = (val) =&gt; {
		setAttributes({ contentLeft: val });
	};
	const onChangeContentRight = (val) =&gt; {
		setAttributes({ contentRight: val });
	};
	const onChangeBborderWidth = (val) =&gt; {
		setAttributes({ borderWidth: Number(val) });//外回り枠の太さ
	};
	const onChangeBorder = (val) =&gt; {
		setAttributes({ border: val });//区切り線のスタイル
	};
	const onChangeFontrWidth = (val) =&gt; {
		setAttributes({ fontSize: Number(val) });//外回り枠の太さ
	};

	return (
		&lt;&gt;
			&lt;InspectorControls&gt;

				&lt;PanelBody title=&quot;フォント設定&quot;&gt;
					&lt;NumberControl
						label=&quot;フォントのサイズ&quot;
						onChange={onChangeFontrWidth}
						value={fontSize}
						min={10}
						max={30}
					/&gt;
				&lt;/PanelBody&gt;
				&lt;PanelBody title=&quot;枠の設定&quot;&gt;
					&lt;NumberControl
						label=&quot;枠回りの線の太さ&quot;
						onChange={onChangeBborderWidth}
						value={borderWidth}
						min={1}
						max={8}
					/&gt;
					&lt;SelectControl
						label=&quot;スタイル&quot;
						onChange={onChangeBorder}
						value={border}
						options={[
							{ label: &quot;None&quot;, value: &quot;none&quot; },
							{ label: &quot;Solid&quot;, value: &quot;solid&quot; },
							{ label: &quot;Dotted&quot;, value: &quot;dotted&quot; },
							{ label: &quot;Dashed&quot;, value: &quot;dashed&quot; },
							{ label: &quot;Double&quot;, value: &quot;double&quot; },
							{ label: &quot;Groove&quot;, value: &quot;groove&quot; },
							{ label: &quot;Ridge&quot;, value: &quot;ridge&quot; },
						]}
					/&gt;
				&lt;/PanelBody&gt;
			&lt;/InspectorControls&gt;
			&lt;div {...useBlockProps({ style: columnStyles })}&gt;
				&lt;div className=&#39;contentLeft&#39;&gt;
					&lt;Dashicon icon=&quot;info&quot; className=&#39;polo-dashicon&#39; /&gt;
					&lt;RichText
						tagName=&quot;p&quot;
						className=&#39;polo-caption&#39;
						onChange={onChangeContentLeft}//テキスト内容を変更したときの動作
						value={attributes.contentLeft}//テキスト内容を変更した時入れる値
					/&gt;
				&lt;/div&gt;
				&lt;RichText
					tagName=&quot;p&quot;
					className=&#39;contentRight&#39;
					onChange={onChangeContentRight}//テキスト内容を変更したときの動作
					value={attributes.contentRight}//テキスト内容を変更した時入れる値
				/&gt;
			&lt;/div&gt;
		&lt;/&gt;
	);
}</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="save.js"><code>import { useBlockProps, RichText } from &quot;@wordpress/block-editor&quot;;
import { Dashicon } from &#39;@wordpress/components&#39;;

export default function save({ attributes }) {
	const { border, borderWidth, fontSize } = attributes;// attributes から columnRuleStyle を分割代入で取得
	const columnStyles = { border, borderWidth, fontSize };// スタイルを表すオブジェクトに columnRuleStyle を追加

	const onChangeContentLeft = (val) =&gt; {
		setAttributes({ contentLeft: val });
	};
	const onChangeContentRight = (val) =&gt; {
		setAttributes({ contentRight: val });
	};

	return (
		&lt;div {...useBlockProps.save({ style: columnStyles })}&gt;
			&lt;div className=&#39;contentLeft&#39;&gt;
				&lt;Dashicon icon=&quot;info&quot; className=&#39;polo-dashicon&#39; /&gt;
				&lt;RichText.Content
					tagName=&quot;p&quot;
					className=&#39;polo-caption&#39;
					onChange={onChangeContentLeft}//テキスト内容を変更したときの動作
					value={attributes.contentLeft}//テキスト内容を変更した時入れる値
				/&gt;
			&lt;/div&gt;
			&lt;RichText.Content
				tagName=&quot;p&quot;
				className=&#39;contentRight&#39;
				onChange={onChangeContentRight}//テキスト内容を変更したときの動作
				value={attributes.contentRight}//テキスト内容を変更した時入れる値
			/&gt;
		&lt;/div&gt;
	);
}</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="editor.scss"><code>.wp-block-create-block-frame-block {
	display: flex; //この中のcolumn-leftとcolumn-rightを横並びにする
	padding: 10px ;
	border-radius: 5px;
}
.contentLeft {
	width: 10%;//
	height: 40px;
	margin: 20px;//枠とカラムのスペース
	padding: 10px 0 0 0px;//アイコンとキャプションの位置調整
	border-right: 1px solid black;
	text-align: center;//子要素まで全てのテキストをセンター揃えにする
    display: grid;
    place-items: center ; //上のgridと組み合わせて、それぞれの四角形で上下左右の中央揃え、余白が残る
    place-content: center;//これを入れると２つのアイテムがピッタリ付いて、それぞれ上下左右の中央揃えになる

	.polo-dashicon {
		width: 30px;
		height: 30px;
		color: rgb(228, 16, 72);
		font-size: 30px;
	}
	.polo-caption {
		margin-top: 5px;
		font-size: 12px;
		font-weight: bold;
		width: 50px;
	}
}
.contentRight {
	display: flex;//テキストを天地中心に表示
	width: 90%;
	padding: 0 10px ;
	align-items: center; //テキストを上下中央にする
}</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="style.scss"><code>.wp-block-create-block-frame-block {
	display: flex; //この中のcolumn-leftとcolumn-rightを横並びにする
	padding: 10px ;
	border-radius: 5px;
}
.contentLeft{
	width: 10%;//
	height: 40px;
	margin: 20px;//枠とカラムのスペース
	padding: 10px 0 0 0px;//アイコンとキャプションの位置調整
	border-right: 1px solid black;
	text-align: center;//子要素まで全てのテキストをセンター揃えにする
    display: grid;
    place-items: center ; //上のgridと組み合わせて、それぞれの四角形で上下左右の中央揃え、余白が残る
    place-content: center;//これを入れると２つのアイテムがピッタリ付いて、それぞれ上下左右の中央揃えになる

	.polo-dashicon {
		width: 30px;
		height: 30px;
		color: rgb(228, 16, 72);
		font-size: 30px;
	}
	.polo-caption {
		margin-top: 5px;
		font-size: 12px;
		font-weight: bold;
		width: 50px;
	}
}
.contentRight {
	display: flex;//テキストを天地中心に表示
	width: 90%;
	padding: 0 10px ;
	align-items: center; //テキストを上下中央にする
}</code></pre></div>


<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img decoding="async" class="wpdm_icon" alt="アイコン" src="https://polo-web.com/wp-content/plugins/download-manager/assets/file-type-icons/zip.svg" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://polo-web.com/download/frame-block-zip-2/'>frame-block.zip</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 90 MB</div>
            </div>
            <div class="ml-3">
                <a class='wpdm-download-link download-on-click btn btn-primary btn-sm' rel='nofollow' href='#' data-downloadurl="https://polo-web.com/download/frame-block-zip-2/?wpdmdl=2833&refresh=69fb32726833b1778070130">ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>@wordpress/create-blockで自作ブロックに挑戦！</title>
		<link>https://polo-web.com/create-block/</link>
		
		<dc:creator><![CDATA[polo-web]]></dc:creator>
		<pubDate>Sun, 27 Apr 2025 05:55:58 +0000</pubDate>
				<category><![CDATA[create-block]]></category>
		<guid isPermaLink="false">https://polo-web.com/?p=2259</guid>

					<description><![CDATA[create-blockはWordPressのブロックを作成するための「ひな型」を作成することが出来る。これをインストールして、後は拡張して自作のブロックを …]]></description>
										<content:encoded><![CDATA[
<p>create-blockはWordPressのブロックを作成するための「ひな型」を作成することが出来る。<br>これをインストールして、後は拡張して自作のブロックを作成していく手順になる。</p>



<p>インストールすれば、デフェルトのブロックが既に完成しているので、そのままブロックとして使える状態になっている。そこから勉強が始まります。<br>中々簡単では無いが、マスターすれば完全なブロックを自在に作成することが出来るようになり、時間をかけてゆっくり勉強することが大事になる。</p>



<h2 class="wp-block-heading">開発環境の作成</h2>



<h3 class="wp-block-heading" id="h3_index_1">前提条件</h3>



<p>ここでのブロックの開発は以下を使っている。</p>



<ul class="wp-block-list has-gray-2-background-color has-background">
<li>ローカル環境（ <a href="https://localwp.com">Local </a>アプリ）</li>



<li>コードエディター（<a href="https://azure.microsoft.com/ja-jp/products/visual-studio-code">Visual Studio Code</a>）</li>



<li>ターミナル</li>



<li><a href="https://nodejs.org/ja">Node.js</a></li>
</ul>



<p>以下では、すでにローカル環境と Node がインストールされていることを前提に作業をしています。</p>



<h2 class="wp-block-heading">Localアプリ内のpluginsに@wordpress/create-blockのインストール</h2>



<p>ターミナルを起動、CDでpluginsフォルダへ移動（自分がインストールしたpluginsの位置によってパスが変わる）</p>



<p class="has-gray-2-background-color has-background">cd /Users/polo/Local\ Sites/local-malon/app/public/wp-content/plugins</p>



<p>移動が完了したら以下のコマンドを実行（最後の my-first-block はプラグイン名になる）</p>



<p class="has-gray-2-background-color has-background">npx @wordpress/create-block@latest my-first-block</p>



<p>latest を外した場合でもひな型を作成できる。違いが分からないどちらでも良いと思うが？。</p>



<p class="has-gray-2-background-color has-background">npx @wordpress/create-block@ my-first-block</p>



<p>インストールしたら「plugins」フォルダ内に「my-first-block」が出来上がっている。<br>LocalからSite folder -&gt; app -&gt; public -&gt; wp-content -&gt; pluginsと辿れば見ることが出来る。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="920" height="464" src="https://polo-web.com/wp-content/uploads/2025/04/post-id-2259-1.png" alt="" class="wp-image-2263" srcset="https://polo-web.com/wp-content/uploads/2025/04/post-id-2259-1.png 920w, https://polo-web.com/wp-content/uploads/2025/04/post-id-2259-1-300x151.png 300w, https://polo-web.com/wp-content/uploads/2025/04/post-id-2259-1-768x387.png 768w" sizes="auto, (max-width: 920px) 100vw, 920px" /></figure>



<p>管理画面で下のようにブロックを「有効」にしておくとすぐに使えるようになる。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="755" height="86" src="https://polo-web.com/wp-content/uploads/2025/04/post-id-2259-4.png" alt="" class="wp-image-2260" srcset="https://polo-web.com/wp-content/uploads/2025/04/post-id-2259-4.png 755w, https://polo-web.com/wp-content/uploads/2025/04/post-id-2259-4-300x34.png 300w" sizes="auto, (max-width: 755px) 100vw, 755px" /></figure>



<p>ブロックを投稿ページに入れてみる。pタグ内にテキストが入っているというだけのブロック。<br>これを基本に自分の作りたいブロックを拡張していくことなる。</p>



<p>インストールが完了したら、次は編集になる。</p>



<h2 class="wp-block-heading">Visual Studio Codeで「my-first-block」ファイルを開く</h2>



<p>以下が開いた状態、src/my-first-block内が編集に使うファイルになる。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="309" height="571" src="https://polo-web.com/wp-content/uploads/2025/04/post-id-2259-3.png" alt="" class="wp-image-2261" srcset="https://polo-web.com/wp-content/uploads/2025/04/post-id-2259-3.png 309w, https://polo-web.com/wp-content/uploads/2025/04/post-id-2259-3-162x300.png 162w" sizes="auto, (max-width: 309px) 100vw, 309px" /></figure>
</div>


<p>Visual Studio Codeのメニューで「ターミナル -&gt; 新しいターミナル」を選択すると編集画面の下の方に以下のようにターミナルが出るので「npm start」と入力してリターンで編集を始める。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="775" height="117" src="https://polo-web.com/wp-content/uploads/2025/04/post-id-2259-2.png" alt="" class="wp-image-2262" srcset="https://polo-web.com/wp-content/uploads/2025/04/post-id-2259-2.png 775w, https://polo-web.com/wp-content/uploads/2025/04/post-id-2259-2-300x45.png 300w, https://polo-web.com/wp-content/uploads/2025/04/post-id-2259-2-768x116.png 768w" sizes="auto, (max-width: 775px) 100vw, 775px" /></figure>



<p>上の説明と重複、以下のコマンドで開発モード実行のスタートになる。</p>



<p class="has-gray-2-background-color has-background">% npm start</p>



<p>npm start になるとファイルを編集して保存すると、それがすぐにプラグイン反映されることになる。</p>



<h2 class="wp-block-heading">編集が終了したらビルドして本番のブロックを作成する</h2>



<p>最後に使うことになるが、本番用のコードを作成するには、以下のコマンドを実行することになる。</p>



<p class="has-gray-2-background-color has-background">% npm run build</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>create-block { …blockProps }と{ useBlockProps }</title>
		<link>https://polo-web.com/create-block-blockprops-%e3%81%a8-useblockprops/</link>
		
		<dc:creator><![CDATA[polo-web]]></dc:creator>
		<pubDate>Thu, 15 May 2025 01:52:21 +0000</pubDate>
				<category><![CDATA[create-block]]></category>
		<guid isPermaLink="false">https://polo-web.com/?p=2545</guid>

					<description><![CDATA[ブロックを作成しているとよく見るものだが...何？ 「blockProps」は変数名でなんでも良い、例えば「blockProps2」とか別の名前にしても問題 …]]></description>
										<content:encoded><![CDATA[
<p>ブロックを作成しているとよく見るものだが&#8230;何？</p>



<p>「<strong>blockProps</strong>」は変数名でなんでも良い、例えば「blockProps2」とか別の名前にしても問題ない。但しリンクされた変数名があるハズなので、その変数名も同時に変更しないとエラーになるので注意！</p>



<p>「<strong>useBlockProps</strong>」はWordPressの関数名なので変更できない。</p>



<p>create-blockの中でよく見るこの２つ、一体何なのか？<br>こんなのもある{&#8230;innerBlocksProps}フックを実行する。</p>



<p>このフックとは？：プログラム中の特定の箇所に、利用者が独自の処理を追加できるようにする仕組みである。また、フックを利用して独自の処理を追加することを「フックする」という。<a href="https://ja.wikipedia.org/wiki/フック_(プログラミング)">ウィキペディアより</a></p>



<p>まだいまいちよく分からない。</p>



<p>useBlockProps() は、エディタのブロックというラッパーの中にクラス名を持つラッパーをネスト（入れ子）にする。クラス等を追加するための機能らしい。<br>追加されたクラスは、スラッシュ「/」の代わりに記号「-」を使用するブロックの名前（name）になっている。これは単純な決まり事で決定されている。</p>



<p>Props：プロパティ、useBlockPropsを直訳すると「ブロックプロパティを使用する」</p>



<p><strong>props</strong>は<strong>コンポーネントが受け取るデータを格納するためのJavaScriptオブジェクト</strong>。 <br>このオブジェクトには、親コンポーネントから渡されたプロパティがキーと値のペアとして含まれている。 子コンポーネントにpropsのキー値を記述することで、キーに紐づく値を使用することができる。とのこと</p>



<p>ラッパーとは？ラップしているということ。ある機能をラップして、そのラッパー名を入れるだけで機能することができる、いわゆる関数のこと？ 似ているがチョット違うようだ。</p>



<p>ラッパーと関数は、プログラミングにおける2つの異なる概念。<br>関数は、特定のタスクを実行するコードブロック。<br>一方、ラッパーは、既存の関数を包み込み、その機能に新しい処理を追加したり、使い方を簡単にするための関数。<br>ラッパーは、元の関数を変更せずに動作を変えることができるため、機能拡張や移植性の向上などに役立つ。</p>



<p>javaScriptのピリオド3つ（…）は、スプレッド構文と呼ばれ、配列やオブジェクトの要素を個々の要素に展開する機能です。主に、配列やオブジェクトの要素を他の場所に展開したり、可変長引数を扱ったりする際に使われる。</p>



<p>例として：配列やオブジェクトを別の配列やオブジェクトに展開できる。<br><code>[1, 2, 3] ...</code>&nbsp;は&nbsp;<code>1, 2, 3</code>&nbsp;と展開される。<br>オブジェクトの場合も同様に展開できる。</p>



<h2 class="wp-block-heading">useBlockPropsを使った例</h2>



<p>以下は実際に出力されたものを「Webインスペクター」の「要素」を表示してみたもの。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>&lt;div role=&quot;document&quot; aria-multiline=&quot;true&quot; 
  class=&quot;block-editor-rich-text__editable block-editor-block-list__block wp-block 
       is-selected wp-block-create-block-polo-richtext is-style-red-border 
       my-richtext is-style-red-border-06c17804-2f0e-41aa-9af3-f81679f16bbc rich-text&quot; 
  style=&quot;color: red; white-space: pre-wrap; min-width: 1px;&quot; 
  id=&quot;block-06c17804-2f0e-41aa-9af3-f81679f16bbc&quot; aria-label=&quot;ブロック: Polo Richtext&quot; 
  data-block=&quot;06c17804-2f0e-41aa-9af3-f81679f16bbc&quot; 
  data-type=&quot;create-block/polo-richtext&quot; data-title=&quot;Polo Richtext&quot; 
      contenteditable=&quot;true&quot;&gt;
テキスト
&lt;/div&gt;</code></pre></div>



<p>blockPropsという変数名を定義した例題になる。上がその出力。</p>



<p>簡単にいうと、タグ名：divを作成して、その中にその下の項目のプロパティを作成するということになる。<br>実際は作成したプロパティよりも沢山のデータが出力されているのが上を見るとわかる。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>const blockProps = useBlockProps({
	tagName: &quot;div&quot;,
	className: &quot;my-richtext&quot;,
	value: attributes.content,
	placeholder: &quot;ここにテキストを入力・・・&quot;,
	style: { color: attributes.color || null },
	onChange: (newContent) =&gt; {
		setAttributes({ content: newContent });
	}
});</code></pre></div>



<p><strong>tagName: &#8220;div&#8221;</strong>：divというタグを使うことになる。<br>className: &#8220;my-richtext&#8221;：下で見るとちょっと見にくいがclass=のところに「my-richtext」が入っているのがわかると思う。このようにクラス名が追加される。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="601" height="149" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2545.png" alt="" class="wp-image-2548" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2545.png 601w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2545-300x74.png 300w" sizes="auto, (max-width: 601px) 100vw, 601px" /></figure>



<p>tagName: &#8220;p&#8221;</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="610" height="171" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2545-2.png" alt="" class="wp-image-2546" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2545-2.png 610w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2545-2-300x84.png 300w" sizes="auto, (max-width: 610px) 100vw, 610px" /></figure>



<p><strong>value: attributes.content</strong>：下のblock.jsonで定義したcontentを使用する？よく分からない。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="block.json"><code>&quot;attributes&quot;: {
	&quot;content&quot;: {
		&quot;type&quot;: &quot;string&quot;,
		&quot;source&quot;: &quot;html&quot;,
		&quot;selector&quot;: &quot;.my-richtext&quot;
    }
},</code></pre></div>



<p><strong>placeholder: </strong>&#8220;ここにテキストを入力・・・&#8221;：これは一時的に何かを置いておくことを指していてリッチテキストのように入力する前のテキストとかが入ることになる。</p>



<p><strong>style: { color: attributes.color || null }</strong>：スタイルを設定する。ここではstyle: color: をttributes.colorから取得する。nullは最初は何も設定しない？</p>



<p>javascriptには論理演算子<code>&amp;&amp;</code>&nbsp;<code>||</code>が存在。それぞれ「AND」「OR」という意味で、条件処理として使う。<br><code>||</code>の左側（attributes.color）がtrue（セットされている）の場合は左側の値（attributes.color）を使用、そうでなければ右側の値（null：空）を返す。</p>



<p>実際に出力したスタイルを見てみると「style=&#8221;color: red;」と出力されている。</p>



<p><strong>onChange: (newContent) =&gt; { setAttributes({ content: newContent }); }</strong>：<br>これはコンテンツが変更されたときに変更された値にセットすることを意味している。</p>



<h2 class="wp-block-heading">記述の仕方も色々</h2>



<p>以下のようにconstでプロパティまで作成して、returnで簡単に入れるやり方。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="edit.js 部分" data-line="3-12, 15"><code>export default function Edit(props) {
	const { attributes, setAttributes } = props;
	const blockProps = useBlockProps({
		tagName: &quot;div&quot;,
		className: &quot;my-richtext&quot;,
		value: attributes.content,
		placeholder: &quot;ここにテキストを入力・・・&quot;,
		style: { color: attributes.color || null },
		onChange: (newContent) =&gt; {
			setAttributes({ content: newContent });
		}
	});
	return (
		&lt;&gt;
			&lt;RichText {...blockProps} /&gt;
		&lt;/&gt;
	);
}</code></pre></div>



<p>３行目で定義だけして、7行目以降でプロパティを入れる方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="edit.js 部分" data-line="3, 7-14"><code>export default function Edit({ attributes, setAttributes }) {

	const blockProps = useBlockProps();

	return (
		&lt;&gt;
			&lt;p {...useBlockProps()}
				tagName=&quot;p&quot;
				onChange={onChangeContent}
				style={{
					backgroundColor: backgroundColor,
					color: textColor
				}}
			&gt;
				{__(&#39;Test Block – editor.js で表示しています!&#39;, &#39;test-block&#39;)}
			&lt;/p&gt;
		&lt;/&gt;
	);
}</code></pre></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>コンソールにログを出力 &#8211; create-block</title>
		<link>https://polo-web.com/create-block-log-to-console/</link>
		
		<dc:creator><![CDATA[polo-web]]></dc:creator>
		<pubDate>Tue, 13 May 2025 05:18:56 +0000</pubDate>
				<category><![CDATA[create-block]]></category>
		<guid isPermaLink="false">https://polo-web.com/?p=2527</guid>

					<description><![CDATA[途中のデータがどのように出力されているかを確認するのに便利なconsole.log()を使って見る。 console.log( ); 例えば、いかようにat …]]></description>
										<content:encoded><![CDATA[
<p>途中のデータがどのように出力されているかを確認するのに便利なconsole.log()を使って見る。</p>



<p class="has-gray-2-background-color has-background">console.log( );</p>



<p>例えば、いかようにattributesから取得したtextColorの値をこの時点で知りたい場合、そのデータを取得することができる。</p>



<p class="has-gray-2-background-color has-background">const { content, backgroundColor, <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-ys-red-color">textColor</mark> } = attributes;<br>console.log(<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-ys-red-color">textColor</mark>);</p>



<p>ブロックを入れたページを表示した状態で、サファリの場合メニューから 開発 -&gt; javascriptコンソールを表示 を選択するとコンソールが表示される。その時テキストの色を変更すると、変更された色のデータが以下のようにコンソールに表示される。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="757" height="400" src="https://polo-web.com/wp-content/uploads/2025/05/post-id-2527.png" alt="" class="wp-image-2531" srcset="https://polo-web.com/wp-content/uploads/2025/05/post-id-2527.png 757w, https://polo-web.com/wp-content/uploads/2025/05/post-id-2527-300x159.png 300w" sizes="auto, (max-width: 757px) 100vw, 757px" /></figure>



<p>スクリプトがうまく動作しているか確認するのに非常に便利な関数になる。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
