当前位置:首页站长学院WordPress古腾堡Gutenberg添加彩色渐变框

WordPress古腾堡Gutenberg添加彩色渐变框

Block介绍

新的编辑器采用Block块的方式插入文章,把内容分成各种块,方便内容的调整和修改,同时也大大的扩展了编辑器的功能。

目前相关的中文内容还是很少,需要了解更多内容可以参考官方介绍

  • Gutenberg官方网站
  • Gutenberg 开发API
  • WordPress 官方图标

效果展示

WordPress古腾堡Gutenberg添加彩色渐变框

如图所示,通过创建自定义块可以更方便的调整文章内容功能和效果,以实现上图的自定义块为例,一步一步的创建。

详细教程

创建自定义的过程大致分为三步,只要按照我的教程一步一步的来,还是很简单的

  1. 在function中注册相关的脚本文件
  2. 编辑块Block的JS文件
  3. 编辑块的css外观

注册 Gutenberg Block块

找到你主题的 function.php文件,在最下方添加以下代码:

  1. // 古腾堡编辑器扩展
  2. function duxq_block() {
  3. wp_register_script( //引入核心js文件
  4. 'duxq_block',
  5. get_stylesheet_directory_uri().'/gradient/gradient.js',
  6. array( 'wp-blocks', 'wp-element' )
  7. );
  8. wp_register_style( //引入css外观样式文件
  9. 'duxq_block',
  10. get_stylesheet_directory_uri().'/gradient/gradient.css',
  11. array( 'wp-edit-blocks' )
  12. );
  13. register_block_type( 'duxq/block', array(
  14. 'editor_script' => 'duxq_block',
  15. 'editor_style' => 'duxq_block',
  16. ) );
  17. }
  18. if (function_exists('register_block_type')) { //判断是否使用古腾堡编辑器
  19. add_action( 'init', 'duxq_block' );
  20. }

语法解释

  • wp_register_script () 引入核心的js文件
  • wp_register_style() 引入css外观样式文件
  • 最后我们检测一下是否使用古腾堡,然后排队注册

编辑Block块JS内容

块是的核心就是JS文件控制的,要实现的所有功能也是靠这个就是文件

  1. (function(blocks, editor, element, components, _) {
  2. var el = element.createElement;
  3. var RichText = editor.RichText;
  4. var AlignmentToolbar = editor.AlignmentToolbar;
  5. var BlockControls = editor.BlockControls;
  6. var Fragment = element.Fragment;
  7. /*---------渐变框自定义块---------*/
  8. blocks.registerBlockType('aduxq/button', {
  9. title: '渐变框',
  10. category: 'layout',
  11. icon: {
  12. src: 'marker',
  13. foreground: '#20a0ff'
  14. },
  15. description: '八种不同的渐变框',
  16. attributes: {
  17. content: {
  18. type: 'array',
  19. source: 'children',
  20. selector: 'div',
  21. },
  22. alignment: {
  23. type: 'string',
  24. },
  25. typeClass: {
  26. source: 'attribute',
  27. selector: '.an_q',
  28. attribute: 'class',
  29. }
  30. },
  31. edit: function(props) {
  32. var content = props.attributes.content,
  33. typeClass = props.attributes.typeClass || 'gradient b1',
  34. alignment = props.attributes.alignment,
  35. isSelected = props.isSelected;
  36. function onChangeContent(newContent) {
  37. props.setAttributes({
  38. content: newContent
  39. })
  40. }
  41. function changeType(event) {
  42. var type = event.target.className;
  43. props.setAttributes({
  44. typeClass: 'an_q ' + type
  45. })
  46. }
  47. function onChangeAlignment(newAlignment) {
  48. props.setAttributes({
  49. alignment: newAlignment
  50. })
  51. }
  52. var richText = el(RichText, {
  53. tagName: 'div',
  54. onChange: onChangeContent,
  55. value: content,
  56. isSelected: props.isSelected,
  57. placeholder: '按钮'
  58. });
  59. var outerHtml1 = el('div', {
  60. className: typeClass
  61. },
  62. richText);
  63. var outerHtml = (el(element.Fragment, null, el(BlockControls, null, el(AlignmentToolbar, {
  64. value: alignment,
  65. onChange: onChangeAlignment,
  66. })), outerHtml1));
  67. var selector = el('div', {
  68. className: 'duxq anz'
  69. },
  70. [el('button', {
  71. className: 'gradient b1',
  72. onClick: changeType
  73. },
  74. ''), el('button', {
  75. className: 'gradient b2',
  76. onClick: changeType
  77. },
  78. ''), el('button', {
  79. className: 'gradient b3',
  80. onClick: changeType
  81. },
  82. ''), el('button', {
  83. className: 'gradient b4',
  84. onClick: changeType
  85. },
  86. ''), el('button', {
  87. className: 'gradient b5',
  88. onClick: changeType
  89. },
  90. ''), el('button', {
  91. className: 'gradient b6',
  92. onClick: changeType
  93. },
  94. ''), el('button', {
  95. className: 'gradient b7',
  96. onClick: changeType
  97. },
  98. ''), el('button', {
  99. className: 'gradient b8',
  100. onClick: changeType
  101. },
  102. ''), ]);
  103. return el('div', {
  104. style: {
  105. textAlign: alignment
  106. }
  107. },
  108. [outerHtml, isSelected && selector])
  109. },
  110. save: function(props) {
  111. var content = props.attributes.content,
  112. alignment = props.attributes.alignment,
  113. typeClass = props.attributes.typeClass || 'gradient b1';
  114. if (alignment) {
  115. var outerHtml = el('div', {
  116. style: {
  117. textAlign: alignment
  118. }
  119. },
  120. el('div', {
  121. className: typeClass
  122. },
  123. content))
  124. } else {
  125. var outerHtml = el('div', {
  126. className: typeClass
  127. },
  128. content)
  129. }
  130. return outerHtml
  131. },
  132. })
  133. })(window.wp.blocks, window.wp.editor, window.wp.element, window.wp.components, window._, );
在以上代码中我们创建了自定义块,点击块就会出现上面图片中的块,包含了文字内容输入,和几个按钮,按下按钮会切换内容的css Class,以实现外观样式的改变!

语法解释

  • blocks, editor, i18n, element, components等均是官方的API接口,实现数据传递
  • blocks.registerBlockType() 创建Block的函数接口
  • registerBlockType的几个参数:title(标题)、icon(图标)、category(分组)、attributes(自定义属性)
  • 两个核心函数:edit 和 save ,分别定义了编辑时候的函数和保存的函数
  • 上面我们增加了几个按钮,传递onClick事件,实现点击切换不同的className

css外观样式

通过创建了自定义块,能实现加载不同的 className 了,那我们添加一些样式在 gradient.css 文件中引用,就可以看到效果了!

  1. .duxq.anz button {
  2. margin: 10px;
  3. padding: .5em 1em;
  4. min-width: 33px;
  5. min-height: 33px;
  6. cursor: pointer
  7. }
  8. .duxq.anz button:hover {
  9. box-shadow: 0 0 10px #ddd;
  10. opacity: .8
  11. }
  12. .gradient {
  13. display: inline-block;
  14. margin: .5em;
  15. padding: .6em .8em;
  16. min-width: 80px;
  17. border: none;
  18. border-radius: 8px;
  19. box-shadow: -1px 4px 10px rgba(0,0,0,.2);
  20. color: #fff;
  21. text-align: center;
  22. transition: all .2s ease
  23. }
  24. .qe_fxan a,.qe_fxan a:hover {
  25. color: #fff
  26. }
  27. .gradient.b1 {
  28. color:#555555;overflow:hidden;margin:10px 0;padding:15px 15px 15px 15px;box-shadow:6px 0 12px -5px rgb(190,196,252),-6px 0 12px -5px rgb(189,196,252);background-color:#8EC5FC;background-image:linear-gradient(62deg,#8EC5FC 0%,#E0C3FC 100%);background-image:-webkit-linear-gradient(62deg,#8EC5FC 0%,#E0C3FC 100%)
  29. }
  30. .gradient.b2 {
  31. color:#555555;overflow:hidden;margin:10px 0;padding:15px 15px 15px 15px;box-shadow:6px 0 12px -5px rgb(255,176,172),-6px 0 12px -5px rgb(255,161,174);background-color:#ff9a8b66;background-image:linear-gradient(220deg,#FF9A8B 0%,#ff6a8838 55%,#FF99AC 100%);background-image:-webkit-linear-gradient(220deg,#ff9a8b7a 0%,#ff6a88ab 55%,#ff99ac82 100%)
  32. }
  33. .gradient.b3 {
  34. color:#555555;overflow:hidden;margin:10px 0;padding:15px 15px 15px 15px;box-shadow:6px 0 12px -5px rgb(253,223,234),-6px 0 12px -5px rgb(215,240,243);background-color:#FFDEE9;background-image:linear-gradient(0deg,#ffdee9c4 0%,#b5fffc8f 100%);background-image:-webkit-linear-gradient(0deg,#ffdee9c4 0%,#b5fffc8f 100%)
  35. }
  36. .gradient.b4 {
  37. color:#eeeeee;overflow:hidden;margin:10px 0;padding:15px 15px 15px 15px;box-shadow:6px 0 12px -5px rgb(12,85,141),-6px 0 12px -5px rgba(10,58,93,0);background-image:radial-gradient( circle 263px at 100.2% 3%,rgba(12,85,141,1) 31.1%,rgba(205,181,93,1) 36.4%,rgba(244,102,90,1) 50.9%,rgba(199,206,187,1) 60.7%,rgba(249,140,69,1) 72.5%,rgba(12,73,116,1) 72.6% )
  38. }
  39. .gradient.b5 {
  40. color:#eeeeee;overflow:hidden;margin:10px 0;padding:15px 15px 15px 15px;box-shadow:6px 0 12px -5px rgb(68,110,92),-6px 0 12px -5px rgb(204,212,163);background-image:linear-gradient( 102deg,rgba(68,110,92,1) 17.4%,rgba(107,156,120,1) 49.3%,rgba(154,183,130,1) 83.4%,rgba(247,237,191,1) 110.3% )
  41. }
  42. .gradient.b6 {
  43. color:#ffffff;overflow:hidden;margin:10px 0;padding:15px 15px 15px 15px;box-shadow:6px 0 12px -5px rgb(253,223,234),-6px 0 12px -5px rgb(215,240,243);background-image:radial-gradient( circle farthest-corner at -8.9% 51.2%,rgba(255,124,0,1) 0%,rgba(255,124,0,1) 15.9%,rgba(255,163,77,1) 15.9%,rgba(255,163,77,1) 24.4%,rgba(19,30,37,1) 24.5%,rgba(19,30,37,1) 66% )
  44. }
  45. .gradient.b7 {
  46. color:#ffffff;overflow:hidden;margin:10px 0;padding:15px 15px 15px 15px;box-shadow:6px 0 12px -5px rgb(175,160,208),-6px 0 12px -5px rgba(177,161,207,0);background-image:radial-gradient( circle farthest-corner at 10% 20%,rgba(95,117,227,1) 0%,rgba(188,167,205,1) 90% )
  47. }
  48. .gradient.b8 {
  49. color:#c7c7c7;overflow:hidden;margin:10px 0;padding:15px 15px 15px 15px;box-shadow:6px 0 12px -5px rgb(155,170,185),-6px 0 12px -5px rgba(177,161,207,0);background-image:radial-gradient( circle farthest-corner at 10% 20%,rgba(0,0,0,1) 0%,rgba(64,64,64,1) 90.2% )
  50. }

以上的 css 仅后台展示的效果,文章的内的效果请把 padding:15px 15px 15px 15px; 中最后一个 15px 的值按照自己喜爱来调,博主的是 35px

以上css内容除了要添加到刚刚引入的css文件中,还需要添加到主题的相关css文件中,才能实现文章页中也显示相同效果!同时css样式可能还需要根据你的主题做一些优先级调整,才能显示正确的效果
温馨提示:

文章标题:WordPress古腾堡Gutenberg添加彩色渐变框

文章链接:https://www.aqzyl.cn/223.html

更新时间:2021年11月20日

本站大部分内容均收集于网络!若内容若侵犯到您的权益,请发送邮件至:779451579@qq.comm我们将第一时间处理!

资源所需价格并非资源售卖价格,是收集、整理、编辑详情以及本站运营的适当补贴,并且本站不提供任何免费技术支持。

所有资源仅限于参考和学习,版权归原作者所有,更多请阅读艾奇资源网络服务协议

本站大部分内容均收集于网络!若内容若侵犯到您的权益,请发送邮件至:779451579@qq.comm我们将第一时间处理! 资源所需价格并非资源售卖价格,是收集、整理、编辑详情以及本站运营的适当补贴,并且本站不提供任何免费技术支持。 所有资源仅限于参考和学习,版权归原作者所有,更多请阅读艾奇资源网络服务协议

给TA打赏
共{{data.count}}人
人已打赏
站长学院

B2 Pro主题优秀案例集锦(持续更新中)

2021-11-15 0:51:56

站长学院

静态与动态IP地址有何区别?

2021-11-18 19:20:09

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索