为古腾堡区块添加Dashicons或自定义SVG图标

亲人是父母给你找的朋友,朋友是你给自己找的亲人,所以同等重要,孰轻孰重没那么多分别。

如果你在开发Gutenberg区块或插件,你可能会遇到一个问题,就是如果为自己的区块或插件添加图标,今天我们就来分享一下,为古腾堡区块添加Dashicons或自定义SVG图标的方法。

WordPress 官方有一个字体图标库 Dashicons ,你可以直接通过添加图标的类名,来调用已有的图标。但是,如果你希望添加其他图标,那就需要采用自定义的svg图标了。

使用默认的WordPress Dashicons作为区块图标

使用 registerBlockType() 创建新区块时,参数之一是“ icon”。你可以使用任何默认的WordPress Dashicons作为图标。

在下面的示例中,我们使用名为“admin-settings”的图标,这将为我们的“Custom Block”设置了下图的图标。

以下就是我们的代码范例,注意看下icon参数的设置:

// Import __ from i18n internationalization library
const { __ } = wp.i18n;
// Import registerBlockType() from block building libary
const { registerBlockType } = wp.blocks;
// Import the element creator function (React abstraction layer)
const el = wp.element.createElement;


/**
 * Register Block using default icon options.
 * 
 * @param   {String}    name        Block name, namespaced
 * @param   {Object}    settings    Block settings
 * @return  {?WPBlock}              Return the block or 'undefined'
*/
registerBlockType('js4wpgb/static-content', {
    title: __('Custom Block', 'JS4WPGB'),
    // Icon for the block
    // Choose from here by default https://developer.wordpress.org/resource/dashicons/
    icon: 'admin-settings',
    category: 'common',
    edit( props ) {
        return el('p', {}, 'Hello world!');
    },
    save( props ) {
        return el('p', {}, 'Hello world!');
    }
});

使用自定义 SVG 图标作为区块图标

在这个示例中,我们从 simpleicons.org 下载了一个 Github 的svg图标。现在,如果你下载了这个图标,打开它,就可以看到下面的代码:

<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub icon</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>

这里要注意的重要部分是SVG标签必须具有 viewBox=”” 属性。

添加css类名到svg

如果你希望能够缩放图标,或者想要使用CSS更改图标的颜色,最好是添加自定义类到SVG标签中,如下所示:

<svg class="custom-icon custom-icon-github" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub icon</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>

在古腾堡编辑器中使用SVG

要在古腾堡编辑器中使用SVG图标,我们需要创建js文件,这里命名为icons.js,包含下面的内容:

const icons = {};

icons.github = <svg class="custom-icon custom-icon-github" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub icon</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>

export default icons;

在这个示例中,我们使用名为 icons 的javascript对象来存储SVG图标。这样,我们可以添加多个图标,并将它们全部放在一个位置。请注意,SVG数据周围没有括号。

为古腾堡插件自定义图标

古腾堡(Gutenberg)中的许多功能和组件都有图标的属性,你可以在其中简单地传递对该图标的引用。像下面的示例一样,我们首先导入icons对象,然后将github图标传递给 registerPlugin 函数,如下所示:

import Sidebar from './components/sidebar.js';
import icons from './icons/icons.js'

const { registerPlugin } = wp.plugins;

registerPlugin("myplugin", {
    icon: icons.github, // The Plugin icon
    render: Sidebar
});

为古腾堡区块自定义图标

区块的处理过程几乎相同。只需导入图标对象,然后将图标传递给registerBlockType 函数,如下所示:

const { __ } = wp.i18n;
const { registerBlockType } = wp.blocks;
import icons from './icons/icons.js'

registerBlockType("va79/blockname", {

    title: __("Blockname"),
    icon: icons.github, // The Block icon
    category: "layout",
    keywords: [__("Blockname")],
    attributes: {
        ...
    },

    edit: ( { attributes, className, isSelected, setAttributes } ) => {
        ...
    },

    save: props => {
        ...
    },

});

为组件自定义图标

如果你想在自己的组件(components)中显示自定义图标,则该过程需要额外的步骤,因为没有将图标传递给的图标道具。在这种情况下,你可以从wp.components导入Icon组件,并通过自己的SVG图标将其添加到你的组件中,如下所示:

import React from 'react'
import icons from '../icons/icons.js'

const { Icon } = wp.components;

class ComponentWithIcon extends React.Component {
    
    constructor() {

        super()
        
    }

    render() {
        return (
            <div>
            
                <Icon className="icon" icon={icons.github}/>

                <h4>Component with icon</h4>

            </div>
        )
    }

}

export default ComponentWithIcon

好了,就这样操作即可!希望可以帮助到大家。

参考资料:

  • https://wp.zacgordon.com/2017/12/07/how-to-add-custom-icons-to-gutenberg-editor-blocks-in-wordpress/
  • https://vanaf1979.nl/wordpress-adding-custom-svg-icons-to-your-gutenberg-blocks-plugin/

本文为古腾堡区块添加Dashicons或自定义SVG图标到此结束。没有我为您掌灯,您在往返家的路上,会觉得难过吗?小编再次感谢大家对我们的支持!

您可能有感兴趣的文章
WordPress站点Gravatar头像前后台不显示的如何解决办法

WordPress做公司官网好吗?会不会显得档次很低?

WordPress主题需要支持https吗?WordPress站点如何如何实现https?

WordPress站点的页面/标签/分类URL地址如何添加.html?

WordPress站点更换了域名后数据库应该如何操作替换新旧域名?