WordPress 2.2.x 之後的版本,並不支援iframe語法,也就是用可視化模式編輯時能正確預覽,但發表文章後<iframe>標籤內的html tag會被擋掉,造成無法正確顯示網頁,以下就是解決問題的方法。

我本來以為只是單純的iframe tag被擋住了,拿掉應該就沒問題,但是到wp-includes目錄下的kses.php(html filter engine)尋找,卻找不到相關的字串。原來kses.php是以「允許」而非「禁止」的方式來過濾html tag,如此一來只好手動把iframe tag加入「允許」清單了。

在kses.php 的前半部,約從第21行開始算起,是一連串的 $allowedposttags變數內容,tags照著英文字母的順序排列以便於維護,不過我們將iframe插入於任何一處都是沒問題的,變數的結構多以如下方式排列:

————————

‘a’ => array(
‘href’ => array(), ‘title’ => array(),
‘rel’ => array(), ‘rev’ => array(),
‘name’ => array()
),

———————-

如果只是要允許<a>這個tag,那麼只需加入    ‘a’ => array(),      這一行即可,不過如iframe的tag後面往往接著 width、border、scrolling等等的一脫拉庫參數,我們必須再把這些參數以子tag的方式成為 ‘a’ 的陣列元素,如下:

—————-

‘iframe’ => array(
’src’ => array(), ‘width’ => array(),
‘height’ => array(), ’scrolling’ => array(),
’style’ => array(), ‘frameborder’ => array(),
‘a’ => array(), ‘href’ => array(),
),

——————

如此一來即可在wordpress上顯示內嵌網頁了,其它的html tag如果原生不被支援也可以比照辦理,但是否100%適用便無法得知。

不過如果不拘泥於一定要用iframe的方式來顯示子網頁,使用 Snap Shots 倒是不錯的替代方案。

參閱:http://www.snap.com/snapshots.php

使用 Facebook 留言

發表回應

謹慎發言,尊重彼此。按此展開留言規則