WordPress 4.4.1破损的短代码

时间:2016-01-20 02:09:17

标签: php wordpress plugins

将WordPress更新为4.4.1(托管服务提供商自动执行,meh!)后,我的ShortCode插件(例如YouTube)被破坏并仅打印出ShortCode,即[youtube 1233456],其中数字为视频的ID。我做了一些研究,这看起来与空间reference here有关。 问题是我有一千个帖子要回去解决这个问题。我正在考虑运行preg_replace函数来替换空格字符,但是,运气不好。见下文。有一个更好的方法吗?这是我试图解决的功能。

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);
}

1 个答案:

答案 0 :(得分: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]>