WordPressのカスタムブロックを作成するためのプラグインで活用するパッケージです。複数のプラグインで共通に使用する機能をパッケージにまとめました。
import {関数名又はコンポーネント名} from "itmar-block-packages"
名前付きインポートでお願いします。
このパッケージは WordPress ブロック開発のビルド環境(@wordpress/scripts)での利用を前提としています。
このパッケージを使用するには、@wordpress/scriptsのバージョン^27.6.0以上を推奨します。以下のコマンドを実行して、@wordpress/scriptsを更新してください:
npm i @wordpress/scripts@^27.6.0 --save-dev
= 2.1.1 =
- フロントエンドデータ共有ライブラリとしてpickupStoreを追加
= 2.0.4 =
- JapaneseHolidaysのgetPeriodQueryのインポート漏れを修正
= 2.0.3 =
- IconSelectControlのcreateElementのインポート漏れを修正
= 2.0.0 =
- ビルド方式を Rollup に変更(ESM 出力を優先し、未使用コードがバンドルされにくい構成に改善)
- build 出力を ESM/CJS に分離(tree-shaking の効率と将来互換性を向上)
- package.json の exports を整備(利用側の bundler が最適な形式を選べるよう改善)
- 破壊的変更: 配布物の構成を build/index.js から build/esm・build/cjs に変更(インポート方法は従来通り)
= 1.11.1 =
- generateMonthCalendarで祝日判定に誤りがあったところを修正
= 1.11.0 =
- PostSelectControlを新設
= 1.10.1 =
- PageSelectControlで固定ページの選択肢が10個しか表示されないという不具合を解消
= 1.10.0 =
- useRebuildChangeFieldを新設。
- FieldChoiceControlについてacfフィールドの付加情報をフィールド選択項目として表示されていたものを表示しないように修正。また、gallaryについては画像を個別に選択するのではなく全体を選択するように修正
- FieldChoiceControlについて、指定された投稿タイプに紐づかないフィールドが選択項目に含まれる場合、それを除外する機能を備えた。
= 1.9.0 =
- shopfiApi.jsを新設。
= 1.8.0 =
- formatCreate.jsを新設。Gutenberg ブロックにおける数値・日付・自由書式の表示形式を選択・制御するための UI コンポーネントおよびフォーマット関数を含みます。
= 1.7.1 =
- serializeBlockTree,createBlockTreeをblockStore.jsに加えた。
- BlockPlace.jsでdesign-groupがフレックス要素の場合は主軸の大きさの設定がflex-grow,flex-shrink,flex-basisとなるよう修正した加えた。
= 1.7.0 =
- バリデーションチェック用の関数を集めるためのvalidationCheck.jsを新設し、URLの形式をチェックするisValidUrlWithUrlApiを加えた。
= 1.6.3 =
- IconSelectControlに設定できるアイコンをFontAwesomeに加え、画像、アバターを選択できるようにした
= 1.6.0 =
- fetchZipToAddressを新設
= 1.5.0 =
- useTargetBlocksを新設
= 1.4.3 =
- UpdateAllPostsBlockAttributesコンポーネントのRestAPIによる更新の不具合を修正
= 1.4.2 =
- UpdateAllPostsBlockAttributesコンポーネントにonProcessStartのコールバック関数の処理を付加
- parse, serializeのimport漏れを修正
- 最初の100投稿までの処理しか対応できなかったものをページング処理で上限なしに改良
= 1.4.1 =
- UpdateAllPostsBlockAttributesコンポーネントの宣言の誤りを修正
= 1.4.0 =
- 指定した投稿タイプの投稿に含まれる特定のブロックの属性を書き換えるコンポーネントであるUpdateAllPostsBlockAttributesコンポーネントを追加
= 1.3.21 =
- FieldChoiceControlで先頭の投稿にアイキャッチ画像が設定されていないとき、フィールド選択のトグルボタンが表示されないという不具合を修正
= 1.3.20 =
- PageSelectControlでhomeUrlをエディタのホームURLに固定しないようにした。
= 1.3.19 =
- FieldChoiceControlの選択可能フィールドにlinkを加えて、個別投稿ページへのリンク設定を可能にした。
- BlockPlaceのフレックスボックスの配置に交差軸の配置を加えた。
- TermChoiceControlでタームの表示をするか否かの選択を設定できるようにした。
= 1.3.18 =
- WordPress RestAPIのエンドポイントを文字列で受けて、その結果を返すrestFetchDataを新設
- TermChoiceControlでonChangeコールバックで返す引数にterm.nameを加えた。
- BlockPlaceコンポーネントのフレックススタイルに折り返しを設定できるように機能追加
- BlockPlaceコンポーネント内のブロック幅とブロック高の設定をBlockWidthとBlockHeightの各コンポーネントを利用するように変更
- BlockWidthに幅と最大幅を別々に設定できるように機能追加
- BlockPlaceコンポーネント内の横方向ブロック配置をフレックス、グリッドスタイルでも設定できるように修正
= 1.3.17 =
- restFieldesをインポートするため、エクスポート項目に加えた。
= 1.3.16 =
- インスペクターの表示の国際化されていない部分を国際化した。
= 1.3.15 =
- BlockPlaceのプロプスに視差効果のフラグを与え、そのフラグがtrueの時は中央揃えのセットができないように制御するようにした
= 1.3.14 =
- position_prmの中央揃えがセットされていない場合にnullが出力されるという不具合を修正
= 1.3.13 =
- BlockWidthのラベル表示が誤っていたのを修正
= 1.3.12 =
- BlockPlaceの配置タイプが絶対位置の場合に縦横の中央揃えが設定できる機能を追加
- 中央揃えができるようにしたために、position_prmにそれに対応するCSSプロパティを返す機能を追加
= 1.3.11 =
- BlockPlace、BlockWidth、BlockHeightのfreeサイズにpx以外の単位を設定できるように修正
- freeサイズにpx以外の単位を設定できるようにしたことから、max_width_prm、width_prm、height_prmがそれに対応できるように修正
= 1.3.10 =
- useDuplicateBlockRemoveの不具合を修正。
- ブロックの幅、高さを設定するためのコンポーネントとしてBlockWidth、BlockHeightを追加
= 1.3.9 =
- カスタムフックとしてuseDuplicateBlockRemoveを追加。このフックはインナーブロックが挿入されたとき、指定されたブロック名が存在れば、挿入されたブロックを削除する。
= 1.3.8 =
- WordPressのデータをRest APIを通して取得する関数等のFieldChoiceControlの機能として、choiceFieldsに登録されるフィールド名がmetaによるカスタムフィールドかacfによるカスタムフィールドかを峻別できるようにフィールド名にmeta_又はacf_という接頭辞を付加するようにした。
- カスタムフックとしてuseBlockAttributeChangesを追加。このフックはitmar/design-group内のブロックで、指定のブロック名とクラス名のブロックの属性に変化があったとき、その変化の内容を通知する機能をもつ。同一のブロック名とクラス名をもつブロックに対して、変化した属性を自動的に設定する機能もある。
= 1.3.4 =
- BlockPlaceコンポーネントの高さにフリーサイズを追加し、デスクトップとモバイルでそれぞれ設定を可能うにした。それに伴ってcssPropertesのheight_prmのシグニチャーを変更。
= 1.3.2 =
- BlockPlaceコンポーネントのインナーブロックの方向で縦方向又は横方向を選択したとき反転の設定ができるようにした。
= 1.3.1 =
- edit.scssおよびstyle.scssの共通スタイルについては機能しないことが判明したので削除した。
= 1.3.0 =
- WordPressのデータをRest APIを通して取得する関数等に、次の関数とReactコンポーネントを追加した
- restTaxonomies
- TermChoiceControl
- edit.scssおよびstyle.scssを配置し、これをトランスパイルして、複数のプラグインから共通のスタイルとして使用できるようにした
WordPressのエディタ(ブロックエディタ、サイトエディタ)の大きさを監視し、幅が767ピクセル以下であればtrueを返します。
const is_mobile=useIsIframeMobile();
ブロックの背景色を返します。ユーザー設定で指定されていれば、その色を返し、指定されていないか、カスタムプロパティ(--wpで始まるプロパティ)であれば、getComputedStyleで実際にレンダリングされた色を取得します。
blockRef
ブロックへの参照。useRefで取得style
ブロックに設定されているスタイル。useBlockPropsで取得
//ブロックの参照
const blockRef = useRef(null);
//blockPropsの参照
const blockProps = useBlockProps({
ref: blockRef, // ここで参照を blockProps に渡しています
});
//背景色の取得
const baseColor = useElementBackgroundColor(blockRef, blockProps.style);
ViewPortの大きさの大きさを監視し、幅が767ピクセル以下であればtrueを返します。
const is_mobile=useIsMobile();
たくさんの要素をもつオブジェクトや配列の内容の変化で発火するuseEffect
callbackfunc
発火させたい関数dependenciesarray
依存変数にしたい配列
useDeepCompareEffect(() => {
・・・
},
[attributes])
iframeにfontawesomeを読み込むカスタムフック
特定のブロックの属性が変更されたとき、その変更内容を返すカスタムフック。引数に指定されたブロック名のブロックで指定されたクラス名をもつブロックの属性の変更内容を返す。第3引数のフラグにtrueを指定すると同じブロック名で同じクラス名をもつブロックの属性を変更されたブロックの属性で自動的に更新する。ただし、変更内容については、指定された属性名の属性を変更及び比較の対象からはずすことができる。
clientIdstring
変更されたことを監視する範囲となるitmar/design-groupブロックのclientIdblockNamestring
変更の監視対象となるブロック名classNamestring
変更の監視対象となるブロックが有するクラス名modFlgboolean
同種ブロックを更新するかどうかのフラグ。デフォルトはfalseexcludeAttributesobject
自動更新の対象から除外する属性をオブジェクトで指定する。オブジェクトは属性名をキーとし、値を適宜のデフォルト値とする。ここで指定された属性は更新チェックの対象からも除外される。使わないときは指定しない。
//clientIdで指定されたブロックの属性変更の内容を返す
const changedAttributes = useBlockAttributeChanges(
clientId,
"itmar/design-checkbox",
"itmar_filter_checkbox",
);
//clientIdで指定されたブロックの属性変更の内容でitmar/design-checkboxという名前のブロックで
//itmar_filter_checkboxというクラス名をもつブロックの属性を自動更新する。
//ただし、labelContentという属性とinputValueという属性については更新対象から除外する
useBlockAttributeChanges(
clientId,
"itmar/design-checkbox",
"itmar_filter_checkbox",
true,
{ labelContent: "", inputValue: false },
);
インナーブロックが挿入されたとき、指定されたブロック名が存在れば、挿入したブロックを削除する。ユーザーに重複したブロックを挿入させたくないときや特定のブロックが存在するとき、ブロックを挿入させないようにするときに活用する。
clientIdstring
インナーブロックの監視する対象となるブロックのclientIdblockNamesarray
存在をチェックするブロック名。文字列を配列で指定する。
useDuplicateBlockRemove(clientId, ["itmar/pickup-posts"]);
styled-componetのcssヘルパー関数内で使用するcssのパラメーターやプロパティを返します。
border-radiusに設定するプロパティを文字列で返します。
radiusobject
topLeft,topRight,bottomRight,bottomLeftをキーとしてもつオブジェクト
marginやpaddingに設定するプロパティを文字列で返します。
spaceobject
top,right,bottom,leftをキーとしてもつオブジェクト
絶対位置のポジションに関するCSSを返します。
posobject,boolean
次の形式のオブジェクト又はboolean
"posValue": {
"vertBase": "top",
"horBase": "left",
"vertValue": "3em",
"horValue": "3em",
"isVertCenter": false,
"isHorCenter": false
},
typestring staic, relative,absolute,fixed,stickyのいづれか
- typeがabsolute,fixed,stickyのときposの値に応じてtop,buttom,left,rightのcssプロパティを返す。 pos内の中央揃えのフラグがオンならtransformのcssプロパティも返す。
- posがtrueのとき
top:50%;left: 50%;transform: translate(-50%, -50%);を返す。
最大幅を設定するためのCSSを返します。
widthstring
wideSize,contentSize,free,fullの文字列free_valstring
px値
- wideSizeのとき
width: 100%; max-width: var(--wp--style--global--wide-size); - contentSizeのとき
width: 100%; max-width: var(--wp--style--global--content-size); - freeのとき
width: 100%; max-width: ${free_val}; - fullのとき
width: 100%; max-width: 100%; - その他の文字列
width: fit-content;
widthのCSSを返します。
widthstring
wideSize,contentSize,freeの文字列free_valstring
px値
- wideSizeのとき
width: var(--wp--style--global--wide-size); - contentSizeのとき
width: var(--wp--style--global--content-size); - freeのとき
width: ${free_val}; - その他の文字列
width: fit-content;
heightのCSSを返します。
heightstring fit, full, freeの文字列free_valstring
px値
- fitのとき
height: fit-content; - freeのとき
height: ${free_val}; - その他の文字列
height: 100%;
marginによる横方向の配置のためのCSSを返します。 また、camelFlgを設定することで、インナースタイル用のオブジェクトを返します。
alignstringcamelFLgboolean
center,rightの文字列
camelFLgがfalse又は設定されていないとき
- centerのとき
margin-left: auto; margin-right: auto; - rightのとき
margin-left: auto; margin-right: 0 - その他の文字列
margin-right: auto; margin-left: 0camelFLgがtrueのとき - centerのとき
{ marginLeft: "auto", marginRight: "auto" } - rightのとき
{ marginLeft: "auto" } - その他の文字列
{}
キャメルケースで与えられたstyleオブジェクトをscssの文字列に変換します。
styleObjectobject
ブロックに設定されたスタイルオブジェクト
const str_scss = convertToScss(styleObject)
WordPressのBorderBoxControlコンポーネントが返すオブジェクトをキャメルケースのCSSに変換して返します。
borderObjobject
WordPressのBorderBoxControlコンポーネントが返すオブジェクト
const css_obj = borderProperty(borderObj)
WordPressのBorderRadiusControlコンポーネントが返すオブジェクトをキャメルケースのCSSに変換して返します。
radiusObjobject
WordPressのBorderRadiusControlコンポーネントが返すオブジェクト
const css_obj = radiusProperty(radiusObj)
marginのcssを返します。
marginObjobject
top,right,bottom,leftをキーとしてもつオブジェクト。オブジェクトの値は単位(px,em,%等)付きにしてください。
paddingのcssを返します。
paddingObjobject
top,right,bottom,leftをキーとしてもつオブジェクト。オブジェクトの値は単位(px,em,%等)付きにしてください。
WordPressのブロックエディタのサイドバーにbox-shadowを設定するためのコントロールを表示させるReactコンポーネント。
<ShadowStyle
shadowStyle={{ ...shadow_element }}
onChange={(newStyle, newState) => {
setAttributes({ shadow_result: newStyle.style });
setAttributes({ shadow_element: newState });
}}
/>
設定されたbox-shadowをスタイルオブジェクトとして返します。
shadowStateobject
ShadowStyleコンポーネントで生成され、ブロックの属性としてセットされるオブジェクト
WordPressのブロックエディタのサイドバーに疑似要素を設定するためのコントロールを表示させるReactコンポーネント。現時点のバージョンでは上下左右の矢印表示の設定のみが可能です。
<PseudoElm
element="Arrow"
direction={pseudoInfo.option}
onChange={(direction) => {
setAttributes({
pseudoInfo: { ...pseudoInfo, option: direction },
});
}}
/>
矢印を表示させる疑似要素を生成してscssの文字列で返します。
const arrow = Arrow(direction);
directionobject
キーをdirection、値をupper,left,right,underのいずれかとするオブジェクト
メディアライブラリ選択画面を開き、ブロックの属性にmediaとmedia.idをセットします。
<SingleImageSelect
attributes={attributes}
onSelectChange={(media) => {
setAttributes({ media: media, mediaID: media.id });
}}
/>
メディアライブラリ選択画面を開き、複数の画像を選択して、ブロックの属性にmediaとmedia.idをセットします。
<MultiImageSelect
attributes={attributes}
label=__("Selected Images", "text-domain")
onSelectChange={(media) => {
// media から map で id プロパティの配列を生成
const media_ID = media.map((image) => image.id);
setAttributes({
mobile_val: { ...mobile_val, mediaID: media_ID, media: media },
});
}}
onAllDelete={() => {
setAttributes({
mobile_val: { ...mobile_val, mediaID: [], media: [] },
});
}}
/>
ブロックを移動させる移動量を設定するコントロールをサイドバーに表示させます。
<DraggableBox
attributes={position}
onPositionChange={(position) =>
setAttributes({ position: position })
}
/>
参照したブロックを可能とするためのカスタムフックを設定します。
useDraggingMove(
isMovable,
blockRef,
position,
onPositionChange
)
isMovableboolean 移動を可とするかどうかのフラグblockRefuseRef
移動させるブロックへの参照positionobject
移動量を決定するためのx,yのキーをもつオブジェクトonPositionChangefunction 移動量が変化したときに属性値を記録するためのコールバック関数
registerBlockTypeの第2引数内にあるeditオブジェクトに、以下の使用例で生成したBlockEditを渡してやることで、ブロックの読み込みをレンダリングの時まで遅らせます。
const LazyEditComponent = React.lazy(() => import("./edit"));
const BlockEdit = (props) => {
return <BlockEditWrapper lazyComponent={LazyEditComponent} {...props} />;
};
WordPressのブロックエディタのサイドバーにアニメーションを設定するためのコントロールを表示させるReactコンポーネント。現時点のバージョンではflipDown,fadeUp,fadeLeft,fadeRightのアニメーション設定が可能です
<AnimationBlock
attributes={attributes}
onChange={(newValue) => setAttributes(newValue)}
/>
設定されたアニメーションのパラメータをオブジェクトとして渡すことで、SCSSの文字列に変換して返します。
anime_prmobject
AnimationBlockコンポーネントで生成され、ブロックの属性としてセットされるオブジェクト
WordPressのブロックエディタのサイドバーにTypographyを設定するためのコントロールを表示させるReactコンポーネント。
<TypographyControls
title={__("Typography", "text-domain")}
fontStyle=
{
default_fontSize: "16px",
mobile_fontSize: "12px",
fontFamily: "Arial, sans-serif",
fontWeight: "500",
isItalic: false,
}
initialOpen={false}
isMobile={isMobile}
onChange={(newStyle) => {
setAttributes({ font_style_input: newStyle });
}}
/>
固定ページの情報を取得して配列で返します。
homeUrlstring
サイトのホームURL
次のようなキーを持つオブジェクトの配列を返します。
value 固定ページのid。ただし、サイトのホームについては-1をかえす。
slug 固定ページのスラッグ
link 固定ページのURL
label 固定ページの名称
カスタム投稿タイプ(ビルトインを含む)の情報を取得して配列で返します。
homeUrlstring
サイトのホームURL
次のようなキーを持つオブジェクトの配列を返します。
value 0から始まる通し番号
slug ポストタイプのスラッグ
link アーカイブページのURL
label ポストタイプの名称
RestAPIのエンドポイントを文字列で受けて、その結果を返す
pathstring
エンドポイント
エンドポイントに対応したレスポンスがPromiseで返る
投稿タイプに登録されているタクソノミー(カテゴリ、タグを含む)の情報およびそのタームの情報をを取得して配列で返します。
post_typestring
投稿タイプのスラッグ
次のようなキーを持つオブジェクトの配列を返します。
slug タクソノミーのスラッグ
name タクソノミーの名称
rest_base タクソノミーのREST_APIの名称
terms ターム情報オブジェクトの配列
投稿タイプに登録されているタクソノミー(カテゴリ、タグを含む)の情報およびそのタームの情報をを取得して配列で返します。
rest_basestring
投稿タイプのRestAPI用スラッグ
"title","date","excerpt","featured_media","meta","acf"の各フィールドの値を投稿タイプの最新データ1件分を返す。この結果で投稿タイプがどのフィールドをサポートしているか、また、どのようなカスタムフィールドが設定されているかの情報を取得することができる。
固定ページを選択できるコンボボックス表示し、固定ページの情報を返します。
selectedSlugstring
選択済みの固定ページのスラッグlabelstring コンボボックスのラベルhomeUrlstring
サイトのホームURLonChangefunc コンボボックスの内容が変化したとき発生するコールバック関数。引数にはfetchPagesOptionsの戻り値が入る。
<PageSelectControl
selectedSlug={selectedSlug}
label={__("Select Post Type", "post-blocks")}
homeUrl={post_blocks.home_url}
onChange={(postInfo) => {
setAttributes({ selectedSlug: postInfo.slug });
}}
/>
投稿タイプ名を選択できるコンボボックス表示し、投稿タイプの情報を返します。
selectedSlugstring
選択済みの投稿タイプのスラッグlabelstring コンボボックスのラベルhomeUrlstring
サイトのホームURLonChangefunc コンボボックスの内容が変化したとき発生するコールバック関数。引数にはfetchArchiveOptionsの戻り値が入る。
<ArchiveSelectControl
selectedSlug={selectedSlug}
label={__("Select Post Type", "post-blocks")}
homeUrl={post_blocks.home_url}
onChange={(postInfo) => {
setAttributes({ selectedSlug: postInfo.slug });
}}
/>
投稿(カスタム投稿タイプを含む)のタイトルを選択できるコンボボックスを表示し、選択した投稿の情報を返します。
-
selectedSlugstring
選択済みの投稿スラッグ -
labelstring
コンボボックスのラベル -
homeUrlstring
サイトのホームURL -
restBasestring
取得対象の REST Base(例:posts/pages/itmar_resourceなど)
※/wp/v2/{restBase}を呼び出して投稿一覧を取得します。 -
statusstring (optional)
取得する投稿ステータス(デフォルト:publish)
例:anyを指定すると下書き等も含めて取得できます。 -
perPagenumber (optional)
1ページあたりの取得件数(最大100 / デフォルト:100) -
orderbystring (optional)
並び順のキー(デフォルト:title) -
orderstring (optional)
並び順(デフォルト:asc) -
searchstring (optional)
検索キーワード(指定した場合、RESTのsearchパラメータで絞り込みます) -
onChangefunc
コンボボックスの内容が変化したとき発生するコールバック関数。
引数にはfetchPostOptionsの戻り値(options配列の要素)が入ります。
valuenumber(投稿ID)labelstring(投稿タイトル)slugstring(投稿スラッグ)linkstring(投稿のパーマリンク)rest_basestring(使用した restBase)post_idnumber(投稿ID)
<PostSelectControl
label={__("Resource Name", "itmaroon-booking-block")}
homeUrl={itmar_option.home_url}
restBase={selectedRest || "itmar_resource"}
selectedSlug={selectedPostSlug || ""}
onChange={(info) => {
if (info) {
setAttributes({
resourceId: info.post_id,
resourceSlug: info.slug,
resourceRest: info.rest_base,
});
}
}}
/>
投稿タイプに紐づけられている全てのタクソノミー(カテゴリ、タグを含む。)に登録されたタームを選択できるチェックボックス表示し、コールバック関数に選択されたタームの情報を返します。
-
selectedSlugstring
選択済みの投稿タイプのスラッグ -
choiceTermsarray
選択済みのタームの情報。配列の要素は次の形式のオブジェクトであること。
{ taxonomy: タクソノミーのスラッグ, term: タームのスラッグ } -
dispTaxonomiesarray
選択済みのタクソノミの情報。配列の要素はタクソノミーのスラッグ -
typestring 選択するデータのタイプ。将来の拡張のためにセットしている。現時点では"taxonomy"とセットすること。 -
labelstring -
onChangefunc チェックボックスの内容が変化したとき発生するコールバック関数。引数には{ taxonomy: タクソノミーのスラッグ, term:{ id: term.id, slug: term.slug, name: term.name } }という形式のオブジェクトを要素とする配列が入る。 -
onSetDispTaxfunc トグルコントロールの内容が変化したとき発生するコールバック関数。引数にはタクソノミーのスラッグを要素とする配列が入る。
<TermChoiceControl
selectedSlug={selectedSlug}
choiceTerms={choiceTerms}
dispTaxonomies={dispTaxonomies}
type="taxonomy"
label={__("Choice Taxsonomy", "post-blocks")}
onChange={(newChoiceTerms) =>
setAttributes({ choiceTerms: newChoiceTerms })
}
onSetDispTax={(newChoiceTerms) => {
setAttributes({ dispTaxonomies: newChoiceTerms });
}}
/>
タイトル、日付、抜粋、アイキャッチ画像、リンクの各フィールドと投稿タイプに紐づけられている全てのカスタムフィールドを選択できるチェックボックス表示し、コールバック関数に選択されたフィールドの情報を返します。 また、各フィールドがどのブロックでレンダリングされるかの設定機能も含みます。
selectedSlugstring
選択済みの投稿タイプのスラッグ (Restタイプ)choiceItemsarray
選択済みのフィールドの情報。配列の要素はフィールドのスラッグ(文字列)。typestring 選択するデータのタイプ。将来の拡張のためにセットしている。現時点では"field"とセットすること。blockMapobject フィールド名とブロック名を対にしたオブジェクト
{
"title":"itmar/design-title",
"date":"itmar/design-title",
"excerpt":"core/paragraph",
"featured_media":"core/image",
"link":"itmar/design-button"
}
-
textDomainstring 使用するブロックのテキストドメイン -
onChangefunc チェックボックスの内容が変化したとき発生するコールバック関数。引数には選択されたフィールドのフィールド名を要素とする配列が入る。
- `onBlockMapChange` func
コンボボックスの内容が変化したとき発生するコールバック関数。引数には設定されたフィールド名とブロック名を対にしたオブジェクトが入る。
<FieldChoiceControl type="field" selectedSlug={selectedRest} choiceItems={choiceFields} blockMap={blockMap} textDomain="post-blocks" onChange={(newChoiceFields) => { setAttributes({ choiceFields: newChoiceFields }); }} onBlockMapChange={(newBlockMap) => { setAttributes({ blockMap: newBlockMap }); }} />
## Font awesom のアイコンを選択するためのコントロール
### IconSelectControl
WordPressのブロックエディタのサイドバーにFont awesomのアイコンを選択するためのコントロールを表示させるReactコンポーネント。
<IconSelectControl iconStyle={ icon_type: "awesome", icon_url: "", icon_name: "f030", icon_pos: "left", icon_size: "24px", icon_color: "var(--wp--preset--color--content)", icon_space: "5px", icon_family: "Font Awesome 6 Free",
}
setPosition={true}
onChange={(newValue) => {
setAttributes({icon_style: newValue})
}}
/>
iconStyleオブジェクトを再設定します。
setPositionプロプスをtrueにするとicon_posとicon_spaceの各オブジェクトを設定するコントロールが表示されます。
<img src="./img/iconControl.png" alt="IconSelectControlのスクリーンショット" width="100" height="200">
## DOM要素をラップしてレンダリングを変化させるReactコンポーネント
### ToggleElement
DOM要素をdiv要素でラップし、flgの値によって、その要素にopenというクラス名を付加します。呼び出し側でflgの値を変更することで、DOM要素の表示・非表示を操作するときに使用します。
<ToggleElement onToggle={handleHambergerToggle} className="itmar_hamberger_btn" openFlg={flg}
<span></span>
<span></span>
<span></span>
CSSでdisplay : grid が設定されたブロックに対し、gridの各種設定を行うため、モーダルウインドウを表示させるReactコンポーネント。
<GridControls
attributes={props.grid_info}
clientId={clientId}
onChange={(newValue) => {
props.onGridChange(newValue)
}}
/>
WordPressのブロックエディタのサイドバーにブロックの配置に関する設定のためのコントロールを表示させるReactコンポーネント。
<BlockPlace
attributes={attributes}
clientId={clientId}
blockRef={blockRef}
isMobile={isMobile}
isSubmenu={is_submenu}
isParallax={true}
onDirectionChange={(position) => {
setAttributes({direction: position });
}}
onReverseChange={(checked) => {
setAttributes({reverse: checked });
}}
onFlexChange={(position,axis) => {
setAttributes({[axis]: position });
}}
onAlignChange={(position) => {
setAttributes({outer_align: position });
}}
onVerticalChange={(position) => {
setAttributes({outer_vertical: position });
}}
onWidthChange={(position) => {
setAttributes({width_val: position });
}}
onHeightChange={(value) => {
setAttributes({ height_val: value });
}}
onFreeWidthChange={(value) => {
setAttributes({free_width: position });
}}
onFreeHeightChange={(value) => {
setAttributes({free_height: position });
}}
onGridChange={(value) => {
setAttributes({grid_info: position });
}}
onPositionChange={(value) => {
setAttributes({ positionType: value });
}}
onPosValueChange={(value) => {
setAttributes({posValue: position });
}}
/>
ブロックコンポーネントの幅を設定する
attributesobject
ブロックの属性オブジェクトisMobileboolean
スクリーン幅が767px以下かどうかのフラグisSubmenuboolean
trueの場合はmax-widthを合わせて設定するonWidthChangefunction widthの種別を設定するためのコールバック関数。返ってくる引数はkey,valueの2つでkeyはwidth_valまたはmax_valという文字列でwidthValはfit,full,wideSize,contentSize,freeのいずれかonFreeWidthChangefunction widthの種別がfreeのとき幅を設定するためのコールバック関数。返ってくる引数はkey,valueの2つでkeyはfree_widthまたはmax_free_widthという文字列でvalueは単位付きの文字列
<BlockWidth
attributes={attributes}
isMobile={isMobile}
isSubmenu={isFront}
onWidthChange={(key,value) => {
setAttributes(
!isMobile
? { default_val: { ...default_val, [key]: value } }
: { mobile_val: { ...mobile_val, [key]: value } },
);
}}
onFreeWidthChange={(key,value) => {
setAttributes(
!isMobile
? { default_val: { ...default_val, [key]: value } }
: { mobile_val: { ...mobile_val, [key]: value } },
);
}}
/>
ブロックコンポーネントの高さを設定する
attributesobject
ブロックの属性オブジェクトisMobileboolean
スクリーン幅が767px以下かどうかのフラグonHeightChangefunction heightの種別を設定するためのコールバック関数。返ってくる引数はfit,full,freeonFreeHeightChangefunction heightの種別がfreeのとき幅を設定するためのコールバック関数。返ってくる引数は単位付きの文字列
<BlockHeight
attributes={attributes}
isMobile={isMobile}
onHeightChange={(value) => {
setAttributes(
!isMobile
? { default_val: { ...default_val, height_val: value } }
: { mobile_val: { ...mobile_val, height_val: value } },
);
}}
onFreeHeightChange={(value) => {
setAttributes(
!isMobile
? { default_val: { ...default_val, free_height: value } }
: { mobile_val: { ...mobile_val, free_height: value } },
);
}}
/>
Hslオブジェクトの値を与えると#000000型のRGB表記に変換するためのユーティリティ関数です。
huenumber
Hslオブジェクトのhueの値saturationnumber
Hslオブジェクトのsaturationの値lightnessnumber
Hslオブジェクトのlightnessの値
16進数のRGB表記を受け取り、それをHslオブジェクトに変換するためのユーティリティ関数です。
strRgb16string
#000000形式の16進数の文字列又はrgb(0,0,0) 形式の文字列
16進数のRGB表記を受け取り、それを10進数のRGBオブジェクトに変換するためのユーティリティ関数です。
strRgb16string
#000000形式の16進数の文字列又はrgb(0,0,0) 形式の文字列
postTypestring
WordPressのRestAPIで使用するrest_baseに相当する文字列blockNamestring
ブロックの名称。投稿本文に含まれるブロックの名前を指定newAttributesobject
新しいブロックの属性をオブジェクトで指定onProcessStartfunction
処理が完了したときに実行するコールバック関数onProcessEndfunction
処理が完了したときに実行するコールバック関数onProcessCancelfunction
処理が中断されたときに実行するコールバック関数
<UpdateAllPostsBlockAttributes
postType={rest_base}
blockName="itmar/markdown-block"
newAttributes={{
element_style_obj: element_style_obj,
backgroundColor: backgroundColor,
backgroundGradient: backgroundGradient,
default_val: default_val,
mobile_val: mobile_val,
radius_value: radius_value,
border_value: border_value,
}}
onProcessStart={startProgress}
onProcessEnd={closeProgress}
onProcessCancel={() => {
dispatch("core/notices").createNotice(
"error",
__("Processing was interrupted.", "markdown-block"),
{ type: "snackbar" },
);
}}
/>
useTargetBlocks は、Gutenberg ブロックエディタ上で同じ親ブロック内にある特定の名前・属性を持つブロックを取得する React フックです。
ネストされたブロックの検索にも対応しています。
このカスタムフックは、次のような用途に使えます:
- 同じ親ブロックの中から特定のブロックを配列で取得
- 属性値でフィルタして一致する 1件のブロックを取得
- ネストされたブロックも含めて取得(オプション)
const result = useTargetBlocks(clientId, blockName, attributeFilter?, includeNested?);| 引数 | 型 | 説明 |
|---|---|---|
clientId |
string |
呼び出し元(自分自身)の clientId。useBlockEditContext() などで取得 |
blockName |
string |
対象ブロック名(例: 'itmar/design-text-ctrl') |
attributeFilter |
`object | null` |
includeNested |
boolean |
オプション:true でネストされたブロックも対象に含める(デフォルト: false) |
import { useBlockEditContext } from '@wordpress/block-editor';
import { useTargetBlocks } from '@your-scope/use-target-blocks';
const MyComponent = () => {
const { clientId } = useBlockEditContext();
const blocks = useTargetBlocks(clientId, 'itmar/design-text-ctrl');
return <div>対象ブロック数: {blocks.length}</div>;
};const targetBlock = useTargetBlocks(clientId, 'itmar/design-text-ctrl', {
inputName: 'address',
});
if (targetBlock) {
console.log('Address block found:', targetBlock.clientId);
}const nestedBlock = useTargetBlocks(
clientId,
'itmar/design-text-ctrl',
{ inputName: 'address' },
true // ネスト含める
);@wordpress/data@wordpress/block-editoruseSelect,getBlockRootClientId,getBlock,getBlocks
ネストされたブロックを平坦化するためのユーティリティも内蔵:
const flattenBlocks = (blocks) => {
return blocks.reduce((acc, block) => {
acc.push(block);
if (block.innerBlocks?.length > 0) {
acc.push(...flattenBlocks(block.innerBlocks));
}
return acc;
}, []);
};- このフックは Gutenberg ブロックエディタ内でのみ使用可能です。
useTargetBlocks()は React フックです。関数やイベントハンドラ内部では直接呼び出せません。
指定された Gutenberg ブロックオブジェクトを、**ネスト構造を保ったままプレーンな JSON 形式に変換(保存用)**します。
import { serializeBlockTree } from '@your-scope/block-tree-utils';
const json = serializeBlockTree(block);block: Gutenberg ブロックオブジェクト(name,attributes,innerBlocksを含む)
{
"blockName": "core/group",
"attributes": { ... },
"innerBlocks": [
{
"blockName": "core/paragraph",
"attributes": { ... },
"innerBlocks": []
}
]
}serializeBlockTree によって得られた JSON 構造を、createBlock() に渡せる Gutenberg ブロックオブジェクトに再構築します。
import { createBlockTree } from '@your-scope/block-tree-utils';
import { createBlock } from '@wordpress/blocks';
const wpBlock = createBlockTree(savedJson);savedJson:serializeBlockTreeで生成されたブロックデータ
createBlock(name, attributes, innerBlocks)の形で再帰的に構成された WP ブロックオブジェクト
Gutenberg のネストされたブロック配列を、1階層の配列としてフラットに展開します。
ブロック構成内にあるすべてのブロック(ネスト含む)を一括走査する際に便利です。
import { flattenBlocks } from '@your-scope/block-tree-utils';
const flat = flattenBlocks(innerBlocks);innerBlocks: Gutenberg のブロック配列(innerBlocksを含む構造)
- 平坦化されたブロック配列(元の構造は保持しない)
import {
serializeBlockTree,
createBlockTree,
flattenBlocks,
} from '@your-scope/block-tree-utils';
const savedData = blocks.map(serializeBlockTree);
const restored = savedData.map(createBlockTree);
const flatList = flattenBlocks(restored);fetchZipToAddress は、zipcloud API を使用して、日本の郵便番号から都道府県・市区町村・町域の住所を非同期で取得する JavaScript 関数です。
Gutenberg ブロック開発やフロントエンドフォーム処理において、郵便番号による住所補完機能を簡単に実装できます。
const addressObj = await fetchZipToAddress("1600022");
if (addressObj) {
const fullAddress = addressObj.address1 + addressObj.address2 + addressObj.address3;
console.log(fullAddress); // 例: 東京都新宿区新宿
}- 郵便番号は「ハイフンなしの7桁の数字」形式のみ許可されます(例:
1234567)。 - 無効な形式や一致しない郵便番号、通信エラー時には
nullを返します。 - エラーはすべて
alert()によってユーザーに通知されます。
{
"zipcode": "1600022",
"prefcode": "13",
"address1": "東京都",
"address2": "新宿区",
"address3": "新宿",
...
}本ライブラリは以下の外部APIを使用しています:
- zipcloud(日本郵便公式APIラッパー)
- この API は外部サービス(zipcloud)に依存しており、アクセス過多による制限や仕様変更の可能性があります。
- 本ライブラリを利用する場合は、zipcloud利用規約 を必ずご確認・順守してください。
const handleZipSearch = async () => {
const result = await fetchZipToAddress(zipValue);
if (result) {
setAttributes({ inputValue: result.address1 + result.address2 + result.address3 });
}
};isValidUrlWithUrlApi は、引数で与えた文字列がURLの形式であるかどうかのバリデーションチェックをします。
if (isValidUrlWithUrlApi(headingContent)) {
setAttributes({ selectedPageUrl: headingContent });
}
Gutenberg ブロックにおける数値・日付・自由書式の表示形式を選択・制御するための UI コンポーネントおよびフォーマット関数です。
このライブラリは、以下の2つの機能を提供します:
-
<FormatSelectControl />
ブロックエディターの「インスペクター設定」内で、表示形式を選択する UI コンポーネント。 -
displayFormated()
保存された設定に基づき、日付・数値・自由文字列の値を整形する表示用関数。
ブロック編集画面で「日付」「数値」「自由文字列」のいずれかの表示形式を選択・設定可能にする PanelBody コンポーネントです。
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
titleType |
"date" | "plaine" | "user" |
✅ | フォーマット対象の種類を指定します。 |
userFormat |
string |
✅ | 現在選択中のフォーマットのキー(例: "num_comma")。 |
freeStrFormat |
string |
✅ | 自由書式入力時の書式文字列(例: "¥%s円")。 |
decimal |
number |
✅ | 数値の小数点以下の桁数(0〜5) |
onFormatChange |
(info: FormatSettings) => void |
✅ | 各設定項目の更新を通知するコールバック |
- 日付形式:
Y-m-d H:i:s、Y年n月j日 (l)など - 数値形式:カンマ区切りあり/なし、金額表示など
- 自由書式:
"%s"を含む文字列で、実際の値が置換されます
指定されたフォーマットに従って、値を整形して文字列として返します。
| 名前 | 型 | 説明 |
|---|---|---|
content |
string | number |
整形対象の生の値 |
userFormat |
string |
日付または数値のフォーマットキー(例: "num_comma"、"Y-m-d") |
freeStrFormat |
string |
"%s" を含む自由書式文字列 |
decimal |
number |
小数点以下の桁数指定(0 なら整数扱い) |
整形後の文字列(string)
<FormatSelectControl
titleType="plaine"
userFormat={attributes.userFormat}
freeStrFormat={attributes.freeStrFormat}
decimal={attributes.decimal}
onFormatChange={(newSettings) => setAttributes(newSettings)}
/>const display = displayFormated(
1234567.89,
attributes.userFormat,
attributes.freeStrFormat,
attributes.decimal
);
// → "1,234,567.89"(例: num_comma + decimal: 2 の場合)
✅ 自由書式(freeStrFormat)について
- %s を含まない文字列は 置換せず、値をそのまま返します
- 例:"¥%s" → "¥1234"、"Total: " → "1234"(%s なし)
✅ 日付フォーマットの安全性
- userFormat が dateFormats に存在しない限り format() は呼び出されません(安全)
- Gutenberg 標準の PHP形式に準拠(例:Y-m-d, F j, Y)
✅ 数値フォーマットの条件
- decimal が 1 以上のときは minimumFractionDigits / maximumFractionDigits が指定され、常に小数点以下を表示
- decimal = 0 の場合は整数として表示
複数の WordPress ブロック(複数の view.js / viewScript)から 共通の状態(state) を扱うための、軽量なグローバルストアです。
window.__itmar_pickup_store__ 上に contexts: Map を1つだけ持ち、pickup_id(任意の id)ごとに ctx(コンテキスト)を共有します。
- id ごとに状態を共有(
contexts: Map) - 購読(subscribe)で state 変更通知(初回は即時通知)
- **部分更新(shallow merge)**で state を更新し購読者へ通知
ctx.inflight.abortなど、通信中管理の置き場も用意
npm i <your-package-name>pickupStore は window.__itmar_pickup_store__ に { contexts: new Map() } を保持します。
この contexts により、別ファイル・別ブロックでも同じ Map を共有できます。
ctx は id ごとに作られる共有オブジェクトです。state・dataset・listeners・cache・inflight などを持ちます。
概要: id の ctx を取得します。存在しなければ作成して返します。id が falsy の場合は null。
- 引数:
id: string - 戻り値:
ctx | null
概要: DOM要素の data-pickup_id から id を取り、その id の ctx を確保した上で ctx.pickupEl と ctx.dataset を更新します。id が無ければ null。
- 引数:
pickupEl: Element - 戻り値:
ctx | null
概要: 既存の ctx を取得します(作成はしない)。無ければ null。
- 引数:
id: string - 戻り値:
ctx | null
概要: ctx を購読します。登録直後に fn(ctx) が 1回即時実行されます(初回通知)。解除関数を返します。
- 引数:
id: stringfn: (ctx) => void
- 戻り値:
() => void(購読解除関数)
概要: ctx.state を partial で 浅くマージして更新し、購読者を全員呼びます。
- 引数:
id: stringpartial: object
- 戻り値:
void
import { registerPickup, subscribe, setState } from "./pickupStore";
const pickups = document.querySelectorAll(".wp-block-itmar-pickup-posts");
pickups.forEach((el) => {
const ctx = registerPickup(el); // data-pickup_id が必要
if (!ctx) return;
// 初期状態を投入
setState(ctx.id, { page: 0, total: 0 });
// 購読(初回は即時に1回呼ばれる)
const unsubscribe = subscribe(ctx.id, (ctxNow) => {
console.log("state:", ctxNow.state);
});
// 必要なら解除
// unsubscribe();
});
registerPickup()はctx.dataset = { ...pickupEl.dataset }のように dataset をスナップショット保存します。





