如何在WordPress Gutenberg编辑器的侧边栏中添加模板颜色到自定义块选项?

时间:2021-08-19 作者:Debojyoti Ghosh

请看附件中的图片以供参考。

我正在为Wordpress Gutenberg编辑器构建一个基于块的插件。

How can I add template colors (即那些黑色和柔和的色调)to ColorPalette (“输入边框颜色”)?

问题是我不想要切换系统(“颜色设置”)那个PanelColorSettings 随附。

“The”;“输入边框颜色”;将成为PanelBody 已经有其他设置使用了TextControl.

我在谷歌上搜索了一下,发现了一个叫做withColors - 然而,这只是一个临时的PanelColorSettings. 所以我认为这不能解决我的要求。

enter image description here

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

How can I add template colors (即那些黑色和柔和的色调)to ColorPalette (“输入边框颜色”)?

在古腾堡,你可以得到block color palette 有两种方式:

使用getSettings() 在块编辑器的数据中(core/block-editor). 例如。

import { select } from \'@wordpress/data\';

const colorPalette = select( \'core/block-editor\' ).getSettings().colors;
// PS: You can also run wp.data.select( \'core/block-editor\' ).getSettings().colors
// via the console.
或特别是在功能组件中,使用useSetting hook@wordpress/block-editorwp.blockEditor 软件包(使用getSettings() 以上)。但是请注意,在WordPress 5.7中,钩子was named useEditorFeature. 例如:

import { useSetting } from \'@wordpress/block-editor\';

// Then in your EDIT FUNCTION, use useSetting( \'color.palette\' ):
const colorPalette = useSetting( \'color.palette\' );
而且您知道,在PHP中,您可以使用get_theme_support( \'editor-color-palette\' ) 获取上述调色板。

示例/演示使用useSetting hook(在WordPress 5.8中)

注意,在这个示例中,我添加了问题中的颜色(红色、白色和蓝色),然后添加了color.palette 在上面

在我的index.js 文件,我在顶部得到了这个:(注意,我省略了registerBlockType 材料)

import {
    useBlockProps,
    InspectorControls,
    useSetting,
} from \'@wordpress/block-editor\';

import {
    PanelBody,
    TextControl,
    ColorPalette,
} from \'@wordpress/components\';

const CUSTOM_COLORS = [
    {
        color: \'#f00\',
        name: \'Red\',
    },
    {
        color: \'#fff\',
        name: \'White\',
    },
    {
        color: \'#00f\',
        name: \'Blue\',
    },
];
edit 功能:

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

    return (
        <>
            <InspectorControls>
                <PanelBody>
                    <TextControl
                        label="Content"
                        value={ content }
                        onChange={ ( value ) => setAttributes( { content: value } ) }
                    />

                    <div>
                        <p>Input border color</p>
                        <ColorPalette
                            value={ borderColor }
                            colors={ [ ...CUSTOM_COLORS, ...useSetting( \'color.palette\' ) ] }
                            onChange={ ( value ) => setAttributes( { borderColor: value } ) }
                        />
                    </div>
                </PanelBody>
            </InspectorControls>

            <div
                { ...useBlockProps( {
                    style: {
                        border: \'2px solid \' + borderColor,
                        padding: \'10px 15px\',
                    },
                } ) }
            >
                { content }
            </div>
        </>
    );
}
InspectorControls 输出此内容(主题为二十一1.4,在块调色板中有10种颜色-see source on Trac):

Screenshot

相关推荐