ワードプレスの始め方
~稼ぐためのしくみづくりまでを
徹底解説!!

好評セミナー”ワードプレス100分でブログサイトを制作”を書籍化しました

amazonでたった1コインで手に入れる

ワードプレスの始め方
~稼げるしくみづくりまで
書籍で徹底解説!

詳細はこちら

amazonでたった1コインで手に入れる

ブログ型サイトでも
本格的ホームページ型でも
起業に副業に・・・

あなたに専門知識がなくても
目的のWebサイトを制作できるよう
ウェブチルがお手伝いします

ブロック作成④【色選択機能をColorPaletteとする】

ワードプレスのブロックの作成方法④として、ColorPaletteで色の選択ができるようにします。

本記事で作成できるブロック

記事:ブロック作成③までで作成したブロックの色選択機能はSelectControlを使っていました。

InspectorControlsを使った場合の色選択ボックス

本記事ではSelectControlの代わりにColorPaletteを使います。文字色・背景色を設定できるようになります。

ColorPaletteで色を設定できるようになる

今回使うコンポーネントの公式ページは以下の通りです。

こちらのページも参照ください。
https://ja.wordpress.org/team/handbook/block-editor/how-to-guides/block-tutorial/block-controls-toolbar-and-sidebar/

コードの変更点

記事:ブロック作成③からの変更点を紹介します。

block.json

変更前のblock.json

{
	"$schema": "https://json.schemastore.org/block.json",
	"apiVersion": 2,
	"name": "create-block/richtext",
	"version": "0.1.0",
	"title": "Richtext",
	"category": "text",
	"icon": "welcome-write-blog",
	"description": "RichTextを使ってブロックを実装",
	"supports": {
		"className": false
	},
	"styles": [
		{
			"name": "default",
			"label": "デフォルト",
			"isDefault": true
		},
		{
			"name": "red-border",
			"label": "赤枠"
		},
		{
			"name": "blue-border",
			"label": "青枠"
		}
	],
	"attributes": {
		"content": {
			"type": "string",
			"source": "html",
			"selector": ".my-richtext"
		},
		"color": {
			"type": "string",
			"default": ""
		},
		"alignment": {
			"type": "string",
			"default": "none"
		}
	},
	"textdomain": "richtext",
	"editorScript": "file:./index.js",
	"editorStyle": "file:./index.css",
	"style": "file:./style-index.css"
}

変更後のblock.json

attributes.colorの代わりにattributes.text_color(文字色用)とattributes.bg_color(背景色用)を追加します。

{
	"$schema": "https://json.schemastore.org/block.json",
	"apiVersion": 2,
	"name": "create-block/richtext",
	"version": "0.1.0",
	"title": "Richtext",
	"category": "my-block",
	"icon": "welcome-write-blog",
	"description": "RichTextを使ってブロックを実装",
	"supports": {
		"className": false
	},
	"styles": [
		{
			"name": "default",
			"label": "デフォルト",
			"isDefault": true
		},
		{
			"name": "red-border",
			"label": "赤枠"
		},
		{
			"name": "blue-border",
			"label": "青枠"
		}
	],
	"attributes": {
		"content": {
			"type": "string",
			"source": "html",
			"selector": ".my-richtext"
		},
		"text_color": {
			"type": "string",
			"default": "#333"
		},
		"bg_color": {
			"type": "string",
			"default": "#fff"
		},
		"alignment": {
			"type": "string",
			"default": "none"
		}
	},
	"textdomain": "richtext",
	"editorScript": "file:./build/index.js",
	"editorStyle": "file:./build/index.css",
	"style": "file:./build/style-index.css"
}

editor.js

変更前のeditor.js

import { __ } from '@wordpress/i18n';
import { InspectorControls, RichText, useBlockProps } from '@wordpress/block-editor';
import { PanelBody, SelectControl } from '@wordpress/components';
import './editor.scss';

export default function Edit(props) {
	const { attributes, setAttributes } = props;
	const blockProps = useBlockProps({
		tagName: "div",
		className: "my-richtext",
		value: attributes.content,
		placeholder: "ここにテキストを入力・・・",
		style: { color: attributes.color || null },
		onChange: (newContent) => {
			setAttributes({ content: newContent });
		}
	});
	return (
		<>
			<RichText {...blockProps} />
			<InspectorControls>
				<PanelBody title="色の選択">
					<SelectControl
						value = { attributes.color }
						options = { [
							{value: '', label: 'カラーを選択'},
							{value: 'red', label: '赤色'},
							{value: 'blue', label: '青色'}
						] }
						onChange = { (newColor) => {
							setAttributes({ color: newColor });
						}}
					/>
				</PanelBody>
			</InspectorControls>
		</>
	);
}

変更後のeditor.js

  • <SelectControl>は削除
  • <InsepctorControls>とその下位に<Panel><PanelBody>を介して<ColorPalette>を配置。
  • <RichText>のstyle属性にcolorとbackgroundColorを追加。
import { __ } from '@wordpress/i18n';
import { 
	ColorPalette,
	AlignmentToolbar, 
	BlockControls, 
	InspectorControls, 
	RichText, 
	useBlockProps 
} from '@wordpress/block-editor';
import { 
	Panel,
	PanelBody, 
} from '@wordpress/components';
import './editor.scss';

export default function Edit(props) {
	const { attributes, setAttributes } = props;
	const blockProps = useBlockProps({
		tagName: "div",
		className: "my-richtext",
		value: attributes.content,
		placeholder: "ここにテキストを入力・・・",
		style: {
			color: attributes.text_color,
			backgroundColor: attributes.bg_color,
			textAlign: attributes.alignment || null
		},
		onChange: (newContent) => {
			setAttributes({ content: newContent });
		}
	});
	return (
		<>
			<RichText {...blockProps} />
			<BlockControls>
				<AlignmentToolbar
					value = { attributes.alignment }
					onChange = { ( newAlignment ) => {
						setAttributes({ alignment: newAlignment });
					} }
				/>
			</BlockControls>
			<InspectorControls>
					<Panel header="色の選択">
						<PanelBody title="文字色">
							<ColorPalette
								onChange= { ( newTextcolor ) => {
									setAttributes({ text_color: newTextcolor });
								}}
							/>
						</PanelBody>
						<PanelBody title="背景色">
							<ColorPalette
								onChange= { ( newBgcolor ) => {
									setAttributes({ bg_color: newBgcolor });
								}}
							/>
						</PanelBody>
					</Panel>
			</InspectorControls>
		</>
	);
}

save.js

変更前のsave.js

import { __ } from '@wordpress/i18n';
import { RichText, useBlockProps } from '@wordpress/block-editor';

export default function save(props) {
	const{ attributes } = props;
	const blockProps = useBlockProps.save({
		tagName: "div",
		className: "my-richtext",
		value: attributes.content,
		style: { color: attributes.color || null }
	});
	return (
		<RichText.Content {...blockProps} />
	);
}

変更後のsave.js

<RichText.Content>のstyle属性にcolorとbackgroundColorを追加

import { __ } from '@wordpress/i18n';
import { RichText, useBlockProps } from '@wordpress/block-editor';

export default function save(props) {
	const{ attributes } = props;
	const blockProps = useBlockProps.save({
		tagName: "div",
		className: "my-richtext",
		value: attributes.content,
		style: {
			color: attributes.text_color,
			backgroundColor: attributes.bg_color,
			textAlign: attributes.alignment || null
		}
	});
	return (
		<RichText.Content {...blockProps} />
	);
}

以上で設定サイドバーにカラーパレットが表示され、文字色と背景色の設定ができるようになります。

ワードプレスの始め方
~稼ぐためのしくみづくりまでを
徹底解説!!

好評セミナー”ワードプレス100分でブログサイトを制作”を書籍化しました

amazonでたった1コインで手に入れる