WordPress升级为短码输出添加了额外的引号

时间:2015-03-19 作者:Gazza

自从升级到4.1.1之后,现在出现了一些短代码。IE HTML输出。

下面是用于生成选项卡的函数文件。

/*******************************************************************
Tabs
********************************************************************/   
function slicetheme_tabs($atts, $content = null)
{   
   if (!preg_match_all("/(.?)\\[(item)\\b(.*?)(?:(\\/))?\\](?:(.+?)\\[\\/item\\])?(.?)/s",   $content, $matches)) {
    return do_shortcode($content);
}
else
{
    for ($i = 0; $i < count($matches[0]); $i++) {
        $matches[3][$i] = shortcode_parse_atts($matches[3][$i]);
    }

    $out = \'<div class="st-tabs">\';     
        $out.= \'<ul class="tab-title unstyled">\';
        for ($i = 0; $i < count($matches[0]); $i++) {
            $attstoclass = !empty($matches[3][$i][\'icon\']) ? \'<i class="\'. $matches[3]  [$i][\'icon\'] .\'"></i> \' : \'\';
            $out.= \'<li><a href="#tab-\'. $i .\'">\'. $attstoclass . $matches[3][$i][\'title\'] .\'</a></li>\';
        }
        $out.= \'</ul>\';     
        $out.= \'<div class="tab-container">\';
        for ($i = 0; $i < count($matches[0]); $i++) {
            $out.= \'<div id="tab-\'. $i .\'" class="tab-content">\'. wpautop( do_shortcode(trim($matches[5][$i])) ) .\'</div>\';
        }
        $out.= \'</div>\';
    $out.= \'</div>\';
    return $out;
}

}
add_shortcode(\'tabs\', \'slicetheme_tabs\');
上面的HTML输出为

<li><a href="#tab-0"><i class="&#8221;icon-user&#8221;"></i> &#8221;Project</a></li>
<li><a href="#tab-1"><i class="&#8221;icon-comments&#8221;"></i> &#8221;Acknowledgements&#8221;</a></li>
页面中的代码为

[tabs] [item icon="icon-user" title="Project Description"]
如你所见,它不仅添加了额外的引号,还没有显示第二个单词?IE项目代替项目描述

所有这些都来自一个不再受支持的主题,但如果我能修复此代码,这是一个可以继续使用的好主题。

干杯

1 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

这可能是wordpress 4.0.1安全修复的结果,它改变了短代码的处理方式http://wptavern.com/wordpress-4-0-1-exposes-bad-development-practices-used-in-some-plugins. 虽然我不确定您的短代码处理的细节,但它似乎与您自己尝试解析短代码而不是正确注册它的一般描述相匹配。

要解决这个问题,您需要创建、注册和处理一个“item”短代码。

结束

相关推荐

Class variables in shortcodes

不知道我做错了什么,但我有以下代码:class the_shortcode { //Define Class Variables private $var; public function __construct() { add_shortcode( \'the_single\', array( $this, \'shortcode_2\' )); }&#