目錄
如何让WordPress编辑器支持内联SVG代码,wordpresssvg
首頁 後端開發 php教程 如何让WordPress编辑器支持内联SVG代码,wordpresssvg_PHP教程

如何让WordPress编辑器支持内联SVG代码,wordpresssvg_PHP教程

Jul 12, 2016 am 08:55 AM
svg

如何让WordPress编辑器支持内联SVG代码,wordpresssvg

WordPress编辑器对SVG的支持一向是非常的不友好,首先它不能上传SVG文件,也不能自动的嵌入到内容中让它正常显示。同时,对内联SVG代码根本不识别,会无情的将SVG代码自动删除。

在上一篇文章中我介绍了如何让Wordpress支持上传SVG图片的方法,似乎是部分的解决了这个问题。最近在开发过程中遇到了大量的需要在Wordpress可视化编辑器里使用内联SVG(inline SVG)代码的情况。

相信你也知道,Wordpress使用的是TinyMCE编辑器,而TinyMCE编辑器仅对标准的HTML5标记进行支持,SVG代码一律不识别,当我在Wordpress的编辑器了“可视化”和“文本”两个标签间切换时,所有的SVG代码都被干净的删除。

网上有很多关于如何让Wordpress的TinyMCE支持SVG的讨论,在TinyMCE官方网站也找到了配置TinyMCE扩展标记的文档。主要是三个配置点:extended_valid_elements,custom_elements和valid_children。下面是网上拷贝的一段网友提供的配置Wordpress编辑器的代码:

add_filter('tiny_mce_before_init', 'vsl2014_filter_tiny_mce_before_init'<span>);
</span><span>function</span> vsl2014_filter_tiny_mce_before_init( <span>$options</span><span> ) {

    </span><span>if</span> ( ! <span>isset</span>( <span>$options</span>['extended_valid_elements'<span>] ) ) {
        </span><span>$options</span>['extended_valid_elements'] = 'svg'<span>;
    } </span><span>else</span><span> {
        </span><span>$options</span>['extended_valid_elements'] .= ',svg'<span>;
    }

    </span><span>if</span> ( ! <span>isset</span>( <span>$options</span>['valid_children'<span>] ) ) {
        </span><span>$options</span>['valid_children'] = '+body[svg]'<span>;
    } </span><span>else</span><span> {
        </span><span>$options</span>['valid_children'] .= ',+body[svg]'<span>;
    }

    </span><span>if</span> ( ! <span>isset</span>( <span>$options</span>['custom_elements'<span>] ) ) {
        </span><span>$options</span>['custom_elements'] = 'svg'<span>;
    } </span><span>else</span><span> {
        </span><span>$options</span>['custom_elements'] .= ',svg'<span>;
    }

    </span><span>return</span> <span>$options</span><span>;
}</span>
登入後複製

还有网友认为下面这样就可以了:

<span>function</span> override_mce_options(<span>$initArray</span><span>) {
    </span><span>$opts</span> = '*[*]'<span>;
    </span><span>$initArray</span>['valid_elements'] = <span>$opts</span><span>;
    </span><span>$initArray</span>['extended_valid_elements'] = <span>$opts</span><span>;
    </span><span>return</span> <span>$initArray</span><span>;
}
add_filter(</span>'tiny_mce_before_init', 'override_mce_options');
登入後複製

还有网友给出了下面的建议:

上面的这些建议单独使用似乎都不成功,但每种建议都似乎能解决一部分问题。经过反复的实验,我最终找到了下面的方法,能成功的让SVG在Wordpress的TinyMCE编辑器里不被删除,而且保存良好的格式。

首先在function.php里加入下面的PHP代码:

<span>/*</span><span>*
 * Add to extended_valid_elements for TinyMCE
 *
 * @param $init assoc. array of TinyMCE options
 * @return $init the changed assoc. array
 </span><span>*/</span>
<span>function</span> my_change_mce_options( <span>$init</span><span> ) {

    </span><span>$ext</span> = 'a[*],altglyph[*],altglyphdef[*],altglyphitem[*],animate[*],animatecolor[*],animatemotion[*],animatetransform[*],circle[*],clippath[*],color-profile[*],cursor[*],defs[*],desc[*],ellipse[*],feblend[*],fecolormatrix[*],fecomponenttransfer[*],fecomposite[*],feconvolvematrix[*],fediffuselighting[*],fedisplacementmap[*],fedistantlight[*],feflood[*],fefunca[*],fefuncb[*],fefuncg[*],fefuncr[*],fegaussianblur[*],feimage[*],femerge[*],femergenode[*],femorphology[*],feoffset[*],fepointlight[*],fespecularlighting[*],fespotlight[*],fetile[*],feturbulence[*],filter[*],font[*],font-face[*],font-face-format[*],font-face-name[*],font-face-src[*],font-face-uri[*],foreignobject[*],g[*],glyph[*],glyphref[*],hkern[*],line[*],marker[*],mask[*],metadata[*],missing-glyph[*],mpath[*],path[*],pattern[*],polygon[*],polyline[*],radialgradient[*],rect[*],script[*],set[*],stop[*],lineargradient[*],style[*],svg[*],switch[*],symbol[*],text[*],textpath[*],title[*],tref[*],tspan[*],use[*],view[*],vkern[*]'<span>;

    </span><span>//</span><span> Add to extended_valid_elements if it alreay exists</span>
    
    <span>if</span> ( <span>isset</span>( <span>$init</span>['extended_valid_elements'<span>] ) ) {
        </span><span>$init</span>['extended_valid_elements'] .= ',' . <span>$ext</span><span>;
    } </span><span>else</span><span> {
        </span><span>$init</span>['extended_valid_elements'] = <span>$ext</span><span>;
    }

    </span><span>//</span><span> Super important: return $init!</span>
    <span>return</span> <span>$init</span><span>;
}

add_filter(</span>'tiny_mce_before_init', 'my_change_mce_options');
登入後複製

在上面的Wordpress过滤器里,我将所有的SVG标记元素都添加了上去(至于用通配符’*[*]’的方法,我没有实验过,有兴趣的朋友可以试试,欢迎给出反馈。)

细心的朋友可能观察到,上面的SVG标记名称全都改成了小写。而很显然SVG官方规范里规定SVG标记名称的大小写是有意义的。但我实验过,使用驼峰式的SVG标记名称是不行的。可能是HTML代码并不在意大小写的原因。

第二,在Wordpress的TinyMCE编辑器里,将所有的SVG代码都用

登入後複製
包裹起来,这样,TinyMCE编辑器就能保持SVG代码的原有缩进格式。

第三,在代码里放入一点东西,比如 ,或一句“抱歉,你的浏览器不支持SVG”:

<span><</span><span>svg</span><span>></span>

    <span><</span><span>rect</span><span>></span> ... <span></</span><span>rect</span><span>></span><span>

    抱歉,你的浏览器不支持SVG
</span><span></</span><span>svg</span><span>></span>
登入後複製

实施了上面的方法后,我现在使用Wordpress的TinyMCE编辑器,在嵌入SVG代码后,就像跟写入普通html代码一样,不会被删除和情况。我并没有深入的研究TinyMCE编辑器对SVG代码的处理机制,上面的这些方法也只是治标不治本。也许随着Wordpress的升级或TinyMCE升级,这些方法会失效。

如果你有更巧的方法,请在评论里分享,谢谢!

原文地址:http://www.manongjc.com/article/657.html

相关阅读:

让Wordpress支持上传SVG图片

WordPress中wp_title()函数的使用方法详解

SVG里的几个动画元素的用法介绍

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1116241.htmlTechArticle如何让WordPress编辑器支持内联SVG代码,wordpresssvg WordPress编辑器对SVG的支持一向是非常的不友好,首先它不能上传SVG文件,也不能自动的嵌入...
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1663
14
CakePHP 教程
1420
52
Laravel 教程
1313
25
PHP教程
1266
29
C# 教程
1237
24
聊聊如何利用 SVG 實現圖片馬賽克效果 聊聊如何利用 SVG 實現圖片馬賽克效果 Sep 01, 2022 am 11:05 AM

不借助 Javascript,如何利用 SVG 實現圖片馬賽克效果?下面這篇文章就來帶大家詳細了解一下,希望對大家有幫助!

深入淺析vue3+vite中怎麼使用svg圖標 深入淺析vue3+vite中怎麼使用svg圖標 Apr 28, 2022 am 10:48 AM

svg圖片在專案中使用的非常廣泛,以下這篇文章帶大家介紹如何在vue3 + vite 中使用svg圖標,希望對大家有所幫助!

svg怎麼轉jpg格式 svg怎麼轉jpg格式 Nov 24, 2023 am 09:50 AM

svg可以透過使用影像處理軟體、使用線上轉換工具和使用Python影像處理庫的方法來轉jpg格式。詳細介紹:1.影像處理軟體包括Adobe Illustrator、Inkscape和GIMP;2、線上轉換工具包括CloudConvert、Zamzar、Online Convert等;3、Python影像處理庫等等。

VUE3入門教學:使用Vue.js外掛程式玩SVG VUE3入門教學:使用Vue.js外掛程式玩SVG Jun 16, 2023 am 09:48 AM

隨著現代Web前端開發的不斷發展,越來越多的技術被廣泛應用於實際開發中。其中,Vue.js是目前最受歡迎的JavaScript框架之一,它基於MVVM模式,提供了豐富的API和元件庫,使得開發響應式、可重複使用、高效的Web應用變得更加容易。而目前最新的Vue.js3版本相較於舊版,又有著更好的性能和更豐富的特性,引起了廣泛的關注和研究。本文將會為大家介紹一種

詳解用SVG為 favicon 新增標識 詳解用SVG為 favicon 新增標識 Sep 07, 2022 am 10:30 AM

怎麼使用SVG為 favicon 新增標識?以下這篇文章為大家介紹一下使用 SVG 產生帶有標識的 favicon的方法,希望對大家有幫助!

vue3+vite2中怎麼使用svg方法 vue3+vite2中怎麼使用svg方法 May 11, 2023 pm 05:55 PM

一、安裝vite-plugin-svg-icons此處還需要安裝下fast-glob相關依賴,不然vite運行npmrundev時會報Cannotfindmodule'fast-glob'的錯誤npmifast-glob@3.x-Dnpmivite-plugin-svg -icons@2.x-D二、在src/components/svgIcon下新建元件index.vueimport{computed}from'vue';cons

vue3+vue-cli4中怎麼使用svg vue3+vue-cli4中怎麼使用svg May 11, 2023 pm 05:58 PM

一、安裝svg-sprite-loadernpminstallsvg-sprite-loader--save-dev二、在src/components/svgIcon下新建元件index.vueimport{computed}from"@vue/reactivity";exportdefault{name:"baseSvgIcon", props:{iconClass:{type:String},className:{type:String},},setup

在HTML5畫布上繪製SVG文件 在HTML5畫布上繪製SVG文件 Sep 15, 2023 pm 03:09 PM

要在畫布元素上繪製HTMLImageElements,請使用drawImage()方法。此方法使用src=”mySVG.svg”定義一個Image變量,並在載入時使用drawImage。 varmyImg=newImage();myImg.onload=function(){  ctx.drawImage(myImg,0,0);}img.src="http://www.example.com/files/sample.svg";

See all articles