Problem:出于安全原因,Wordpress multisite仅允许管理员帐户在html中包含图像。可以安装一个关闭这些限制的插件,但它显然会打开一大堆安全漏洞,所以我宁愿避免这种情况。我已经有了bbpress bbcode
和bbpress shortcode whitelist
已安装插件,这意味着用户可以使用[img]http://some.url/to/an/image[/img]
. 然而,在缺少用于wordpress评论的良好bbcode工具栏的情况下,我还想使用MDC Comment Toolbar
插件,它使用html插入图像。因为在单个站点安装中,作者可以在评论中包含html,所以会显示“添加媒体”按钮。但由于其多站点,因此会将其删除。
Partial Solution:我突然想到要编写一个插件,使用preprocess_comment
要查找的挂钩img
html标记并将其转换为bbcodes。但到目前为止,我正在努力让这项工作发挥作用。以下是我的插件到目前为止的内容。它使用XSLTProcessor
但我愿意接受其他想法。。。
function html2bbcode( $commentdata ) {
$xhtml = $commentdata[\'comment_content\'];
$xsl = <<<\'EOB\'
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text">
<xsl:template match="img">[img="<xls:value-of select="@alt"/>"]<xls:value-of select="@src"/>[/img]</xsl:template>
</xsl:stylesheet>
EOB;
$xmldoc = DOMDocument::loadHTML($xhtml);
$xsldoc = DOMDocument::loadXML($xsl);
$proc = new XSLTProcessor();
$proc->registerPHPFunctions();
$proc->importStyleSheet($xsldoc);
$xhtml = $proc->transformToXML($xmldoc);
$commentdata[\'comment_content\'] = $xhtml;
return $commentdata;
}
add_filter( \'preprocess_comment\' , \'html2bbcode\' );
我真的不相信我的xsl是对的。无论输入什么,它似乎都会生成一个空字符串。但解决方案不一定要使用xsl。任何有用的东西。