WordPress一直在修改我的嵌入代码

时间:2011-05-14 作者:Dale

每次我编辑WordPress帖子或嵌入谷歌地图的页面时,使用“可视化”编辑模式,WordPress会删除部分数据。

例如:此

<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps/ms?ie=UTF8&amp;hl=en&amp;msa=0&amp;msid=212526618623367333770.00049b7dc074f6426719d&amp;t=h&amp;ll=34.926059,-81.964874&amp;spn=0.300106,0.458336&amp;output=embed"></iframe><br /><small>View <a href="http://maps.google.com/maps/ms?ie=UTF8&amp;hl=en&amp;msa=0&amp;msid=212526618623367333770.00049b7dc074f6426719d&amp;t=h&amp;ll=34.926059,-81.964874&amp;spn=0.300106,0.458336&amp;source=embed" style="color:#0000FF;text-align:left">1825 Spartanburgh Map</a> in a larger map</small>
变成

<small>View <a style="color: #0000ff; text-align: left;" href="http://maps.google.com/maps/ms?ie=UTF8&amp;hl=en&amp;msa=0&amp;msid=212526618623367333770.00049b7dc074f6426719d&amp;ll=34.926059,-81.943846&amp;spn=0.300106,0.416279&amp;source=embed">1825</a> in a larger map</small>
它根本不会渲染贴图。

在“html”模式下编辑时不会发生这种情况。

如何防止Wordpress更改此嵌入代码?

2 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

问题是WordPress的TinyMCE核心配置,它剥离了IFRAME标记。

您可以通过挂接到tiny_mce_before_init. 例如,以下代码将阻止TinyMCE剥离IFRAME、PRE和DIV标记:

function mytheme_tinymce_config( $init ) {

// Change code cleanup/content filtering config

    // Don\'t remove line breaks
    $init[\'remove_linebreaks\'] = false; 
    // Convert newline characters to BR tags
    $init[\'convert_newlines_to_brs\'] = true; 
    // Preserve tab/space whitespace
    $init[\'preformatted\'] = true; 
    // Add to list of formats to remove with Remove Format button
    $init[\'removeformat_selector\'] = \'b,strong,em,i,span,ins,del,h1,h2,h3,h4,h5,h6,pre\';
    // Do not remove redundant BR tags
    $init[\'remove_redundant_brs\'] = false;

// Add to list of valid HTML elements (so they don\'t get stripped)

    // IFRAME
    $valid_iframe = \'iframe[id|class|title|style|align|frameborder|height|longdesc|marginheight|marginwidth|name|scrolling|src|width]\';
    // PRE
    $valid_pre = \'pre[id|name|class|style]\';
    // DIV
    $valid_div = \'div[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title]\';

    // Concatenate 
    $cbnet_valid_elements = $valid_iframe . \',\' . $valid_pre . \',\' . $valid_div;

    // Add to extended_valid_elements if it alreay exists
    if ( isset( $init[\'extended_valid_elements\'] ) ) {
        $init[\'extended_valid_elements\'] .= \',\' . $cbnet_valid_elements;
    } else {
        $init[\'extended_valid_elements\'] = $cbnet_valid_elements;
    }

// Pass $init back to WordPress
    return $init;
}
add_filter(\'tiny_mce_before_init\', \'mytheme_tinymce_config\');
See here for the full list of configurable options.

SO网友:mrtsherman

我不确定,但我认为这可能与帖子允许的标签有关。看看我几天前的问题。基本上wordpress会过滤掉不允许的标签。例如,您可以阻止脚本标记。您还必须指定允许哪些参数。例如,您可以允许img标记使用src属性,但不允许使用alt属性。

What are allowedposttags and allowedtags?

结束

相关推荐

Displaying oEmbed errors?

有时,通过oEmbed嵌入项目是不可能的,例如,当YouTube视频已禁用嵌入时。The oEmbed service will return a 401 Unauthorized, 并且不会转换代码。有没有办法通知用户这一点?当前的工作流是非直观的(至少对我来说),我更喜欢在WordPress页面上,或者更好的是,在编辑器中显示一条消息,说明对象无法嵌入。