WordPress图像标题中的HTML标签

时间:2012-01-16 作者:mnorrish

我正在用Wordpress(3.3)开发一个客户端网站,但发现图像标题功能去掉了任何HTML标记。

由此产生的标题是纯文本,这使得正确的图像贷记很困难。作为一个客户网站,所见即所得编辑也是必需的。

例如,如果我的短代码是:

[caption caption="This is my <em>example</em> caption"]
<a href="http://example.com/image.jpg">
<img src="http://example.com/image-300x224.jpg" alt=""/>
</a>
[/caption]
标签从标题属性中剥离,如下所示:

[caption caption="This is my example caption"]
<a href="http://example.com/image.jpg">
<img src="http://example.com/image-300x224.jpg" alt=""/>
</a>
[/caption]
我最想保留的标签是<em>, <sup>, <sub>, <span><a>.

我还没有找到任何现有的插件来修复这个问题,除了链接。

关于如何进行此操作以及覆盖哪些函数,您有什么想法吗?

3 个回复
SO网友:mnorrish

我很高兴在3.4版中添加了更好的支持,但现在我已经通过更改图像插入行为来解决了这个问题,这样它就不会使用[标题]短代码。

下面是我为函数添加的内容。php:

add_filter( \'disable_captions\', create_function(\'$a\', \'return true;\') );

function image_send_to_editor_2($html, $id, $caption, $title, $align, $url, $size, $alt) {
    if ( !$caption ) {
        return $html;
    } else {
        $width = \'auto\';
        if ( preg_match( \'/width="([0-9]+)/\', $html, $matches ) ) {
            $width = $matches[1] . \'px\';
        }

        $output = \'<div id="attachment-\' . $id . \'" class="wp-caption align\' . $align . \'" style="width: \' . $width . \';">\';
        $output .= $html;
        $output .= \'<p class="wp-caption-text">\' . $caption . \'</p>\';
        $output .= \'</div>\';

        return $output;
    }

}

add_filter(\'image_send_to_editor\', \'image_send_to_editor_2\', 10, 8);
这对于TinyMCE Advanced 具有停止删除(和添加)选项的插件<p><br /> 已启用标记。

SO网友:Sterex

好吧,你的问题看起来很有趣。

我能想到的一件事是:

[caption caption="caption1"]
<a href="http://example.com/image.jpg">
<img src="http://example.com/image-300x224.jpg" alt=""/>
</a>
[/caption]
为文章存储一个名为“caption1”和HTML标题的自定义元字段。在上使用筛选器the_content() 通过从Posteta中提取所有标题1,将其转换为HTML标题。

SO网友:Raphael

首先,你可以在标题中添加这样的内容:

[caption ...]
  <a ...> ... </a>
  Your caption text
[/caption]
这适用于大多数格式化HTML。链接失败(iirc),标题也可能不会完全按照您喜欢的方式放置。

不过,我观察到,字幕中的短代码所产生的内容并没有经过消毒。因此,我的变通方法使用了优秀且非常有用的插件Shortcode Exec PHP 并创建一个短代码captiontext 使用此PHP:

return \'<div style="text-align: center; margin: 5px 0px -20px 0px;">\'.do_shortcode($content).\'</div>\';
显然,根据您的喜好调整样式信息。现在你可以这样使用它

[caption ...]
  <a ...> ... </a>
  [captiontext]Your caption text[/captiontext]
[/caption]
你可以使用你想要的所有HTML。

Edit: 此解决方案的优点:它(相对)稳定,不受Wordpress和您的口味未来变化的影响。只要短代码按现在的方式处理,您就可以调整短代码定义,以补偿所有已写帖子中的任何更改,而无需触摸其中的每一个。此外,变通方法很好地集成到Wordpress的自然流中;特别是,您可以在标题中使用其他短代码。最后但并非最不重要的一点是,您不必为解决方案接触任何主题或核心文件,而是使用成熟的插件。

结束