2016-01-20 167 views
0

將WordPress更新爲4.4.1(主機提供商自動執行,meh!)後,我的ShortCode插件(例如YouTube)已損壞並僅打印出ShortCode,即[youtube 1233456] ,其中的數字是視頻的ID。我做了一些研究,這看起來與空間reference here有關。 問題是我有一千個帖子回去修復這個問題。我想運行一個preg_replace函數替換空格字符,但是,沒有太多的運氣。見下文。有一個更好的方法嗎?這是我正在嘗試修復的功能。WordPress 4.4.1破碎的短代碼

add_shortcode('youtube','youtube_video'); 

function youtube_video($attr) { 
$output = '<div class="youtube-container"><iframe width="560" height="420" src="http://www.youtube.com/embed/' . $attr[0] . '?autoplay=0" frameborder="0" allowfullscreen="false"></iframe></div>'; 
return $output; 
} 

我試圖做這樣的事情,但沒有運氣

function youtube_video($attr) { 
$output = '<div class="youtube-container"><iframe width="560" height="420" src="http://www.youtube.com/embed/' . $attr[0] . '?autoplay=0" frameborder="0" allowfullscreen="false"></iframe></div>'; 

return preg_replace('/\s.*$/', "", $output); 
} 

回答

0

這可能是你如何調用的短代碼。見https://make.wordpress.org/core/2015/07/23/changes-to-the-shortcode-api/。例如,這個曾經被允許:

<a href="/[shortcode query="?ref="]"> 

但是,現在這是不允許的。問題是顯然導致跨站腳本漏洞的未經轉義的雙引號。這裏是你將如何修復它:

Example 1: <a href="/[shortcode query='?ref=']"> 
Example 2: <a href='/[shortcode query="?ref="]'> 

任何一個例子都可以工作。

這是另一個例子。這是不再允許:

<div style="background-image: url('[shortcode]');"> 

以下是他們建議如何做:

<div [shortcode]>