使WordPress所见即所得不删除iframe的


16

我有一个博客,出于各种原因,我经常需要将iframe插入帖子中(不要问为什么只相信我!)

当我使用“可视”视图编辑帖子时,所见即所得不断删除我的iframe ...

我知道如果我使用“ html”视图并且仅从“ html”视图查看/保存,则可以将iframe保留在帖子中...但是,我真的很希望能够使用普通的所见即所得来编辑我的帖子无需诉诸“ html”视图。

我有什么办法可以禁用此行为?我看过这篇文章,建议您进行编辑wp-includes/js/tinymce/tiny_mce_config.php,但我真的想避免做类似的事情,否则可能会破坏升级!


您链接到的帖子还具有Otto的非编辑过滤器解决方案。你尝试过吗?
拉斯特

为了澄清一点,我宁愿不必破解一些PHP来做到这一点(我可能会忘记,升级和破坏东西)……如果这是一个设置(即使是在PHP中),或者我可以说些什么,将一些代码包裹在我的iframe上也可以。在这一点上,我可能只会使用一些JavaScript来做到这一点,但这似乎很混乱。
贾斯汀·詹金斯

1
没有为此的配置选项,也没有办法在编辑器中对其进行编码(如果存在解决方法,这将是一个安全漏洞)。将提到的代码放在插件中是最好的方法,并且它也将在升级后继续存在(升级时不会删除插件)。
Jan Fabry

@Jan,抱着希望,有人知道我们不知道的东西……如果没有,谢谢。奇怪的是,这仅在视觉部分是一个安全漏洞,而不是HTML?我知道以视觉方式将东西滑到人的鼻子下面比较容易...但仍然如此。
贾斯汀·詹金斯

iframes对于嵌入视频很有用。该<object>方法依赖于Flash,而如今<iframe>大多数视频共享网站都支持该方法,该方法支持HTML5视频。
TRiG 2011年

Answers:


9

如果您不想编写自己的代码,则可以使用一个插件来嵌入<iframe>

然后只需使用这样的简码

[iframe http://example.com 400 500]

@Ethan Seifert-好答案!
MikeSchinkel 2010年

这确实适用于我的问题,不需要“黑客”。同时仍然需要使用HTML视图...谢谢。
贾斯汀·詹金斯

此答案中的插件已不再是最新的,而是看起来不错:wordpress.org/plugins/iframe
Tim Malone

23

您可以自定义TinyMCE的过滤器,有关<iframe>s和其他标签的以下示例,请在TinyMCE中使用Google Maps。

function fb_change_mce_options( $initArray ) {

    // Comma separated string od extendes tags.
    // Command separated string of extended elements.
    $ext = 'pre[id|name|class|style],iframe[align|longdesc|name|width|height|frameborder|scrolling|marginheight|marginwidth|src]';

    if ( isset( $initArray['extended_valid_elements'] ) ) {
        $ext = ',' . $ext;
    }
    $initArray['extended_valid_elements'] = $ext;

    // Maybe, set tiny parameter verify_html
    //$initArray['verify_html'] = false;

    return $initArray;
}
add_filter( 'tiny_mce_before_init', 'fb_change_mce_options' );

将其添加到主题的自定义插件或functions.php中。您也可以在我的文章中阅读更多信息:http : //wpengineer.com/1963/customize-wordpress-wysiwyg-editor/


@bueltge-好的答案。我只是在您的网站上阅读了今天早些时候的那篇文章。您知道,TinyMCE网络上的大多数示例都不是在WordPress的上下文中,而在WordPress的上下文中,则要复杂得多。您清楚地了解它。关于TinyMCE,您可以了解更多信息。您是否考虑过在其上撰写一系列博客文章?
MikeSchinkel 2010年

我最大的问题是时间;但是我在草稿中又有一个关于此主题的帖子,也许我会在接下来的几周内发布。感谢您的致意。
bueltge

1

我必须升级到wordpress 3.2.1,然后安装Embed Iframe,效果很好。

在WordPress中从html切换到Visual时,不再删除iframe标记。


1

在多站点环境中,除超级管理员外,每个用户都将获得html筛选(因为存在潜在的安全漏洞)。基于此,您可以向编辑器添加“添加unfiltered_html功能”。

/**
 * Enable unfiltered_html capability for Editors.
 *
 * @param  array  $caps    The user's capabilities.
 * @param  string $cap     Capability name.
 * @param  int    $user_id The user ID.
 * @return array  $caps    The user's capabilities, with 'unfiltered_html' potentially added.
 */
function km_add_unfiltered_html_capability_to_editors( $caps, $cap, $user_id ) {
    if ( 'unfiltered_html' === $cap && user_can( $user_id, 'editor' ) ) {
        $caps = array( 'unfiltered_html' );
    }
    return $caps;
}
add_filter( 'map_meta_cap', 'km_add_unfiltered_html_capability_to_editors', 1, 3 );

0

如果您不希望在短代码解决方案中使用其他插件,则可以将这些内容添加到主题,plugin或functions.php中,以手动添加。如有必要,您可能需要向键数组添加更多键。

add_shortcode( 'iframe' , 'mycustom_shortcode_iframe' );
function mycustom_shortcode_iframe($args, $content) {
    $keys = array("src", "width", "height", "scrolling", "marginwidth", "marginheight", "frameborder");
    $arguments = mycustom_extract_shortcode_arguments($args, $keys);
    return '<iframe ' . $arguments . '></iframe>';
}

function mycustom_extract_shortcode_arguments($args, $keys) {
    $result = "";
    foreach ($keys as $key) {
        if (isset($args[$key])) {
            $result .= $key . '="' . $args[$key] . '" ';
        }
    }
    return $result;
}

然后在您的帖子页面中,用法如下所示:

[iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://maps.google.de/maps?f=q&amp;source=s_q&amp;hl=de&amp;geocode=&amp;q=New+York+City,+New+York,+USA&amp;aq=0&amp;oq=new+york&amp;sll=51.238455,6.81435&amp;sspn=0.373151,1.056747&amp;ie=UTF8&amp;hq=&amp;hnear=New+York+City,+New+York,+Vereinigte+Staaten&amp;t=m&amp;z=11&amp;iwloc=A&amp;output=embed"]

它不起作用。它只是将iframe发布为相同的内容
Ankit Agrawal

我不知道您想要代码做什么,但是代码应该按照您的意愿在内容中发布iframe。因此,如果iframe出现在您的前端视图中,则说明一切正常。
SunnyRed

0

我发现使用Fusion Editor插件在Wordpress中构建页面非常有效。

该视频演示了如何使用Fusion Builder(有关添加容器,列,元素和代码块的部分,跳至4:15):https : //www.youtube.com/watch?v= UDyNsnB_COA

我单击添加一个容器,然后单击添加元素,然后添加代码块而不是文本块(文本块将删除iframe,但代码块将不会)。在我的代码块中,粘贴我的iframe代码并发布。效果很好,我不必修改任何PHP文件!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.