将IFRAME内容添加到边栏小部件

时间:2011-06-04 作者:Matt Gibson

我试图在WordPress侧边栏小部件(自托管WordPress,v3.1.3)中添加一个亚马逊广告小部件。小部件代码基本上是一个iframe。

我尝试使用“文本”小部件并将iframe代码粘贴到其中,但当我保存小部件时,iframe代码消失了。

我以前遇到过这个问题/限制,并使用IFrame Widget, 但是我想在侧边栏中使用多个iFrame,而iFrame小部件一次只支持一个小部件。

我是否遗漏了一些明显的东西?是否有允许小部件中使用iframe代码的设置?或者它通常是允许的,而我对我的安装做了一些愚蠢的事情?如果没有,有什么好的解决办法吗?

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

只需创建一个不过滤输入的小部件。这可能是您可以构建的具有用户输入的最简单的小部件。

这是我在插件中使用的小部件Magic Widgets.

/**
 * Simplified variant of the native text widget class.
 *
 * @author Fuxia Scholz
 * @version 1.0
 */
class Unfiltered_Text_Widget extends WP_Widget
{
    /**
     * @uses apply_filters( \'magic_widgets_name\' )
     */
    public function __construct()
    {
        // You may change the name per filter.
        // Use add_filter( \'magic_widgets_name\', \'your custom_filter\', 10, 1 );
        $widgetname = apply_filters( \'magic_widgets_name\', \'Unfiltered Text\' );
        parent::__construct(
            \'unfiltered_text\'
        ,   $widgetname
        ,   array( \'description\' => \'Pure Markup\' )
        ,   array( \'width\' => 300, \'height\' => 150 )
        );
    }

    /**
     * Output.
     *
     * @param  array $args
     * @param  array $instance
     * @return void
     */
    public function widget( $args, $instance )
    {
        echo $instance[\'text\'];
    }

    /**
     * Prepares the content. Not.
     *
     * @param  array $new_instance New content
     * @param  array $old_instance Old content
     * @return array New content
     */
    public function update( $new_instance, $old_instance )
    {
        return $new_instance;
    }

    /**
     * Backend form.
     *
     * @param array $instance
     * @return void
     */
    public function form( $instance )
    {
        $instance = wp_parse_args( (array) $instance, array( \'text\' => \'\' ) );
        $text     = format_to_edit($instance[\'text\']);
?>
        <textarea class="widefat" rows="7" cols="20" id="<?php
            echo $this->get_field_id( \'text\' );
        ?>" name="<?php
            echo $this->get_field_name( \'text\' );
        ?>"><?php
            echo $text;
        ?></textarea>
        <?php
        /* To enable the preview uncomment the following lines.
         * Be aware: Invalid HTML may break the rest of the site and it
         * may disable the option to repair the input text.

        ! empty ( $text )
            and print \'<h3>Preview</h3><div style="border:3px solid #369;padding:10px">\'
                . $instance[\'text\'] . \'</div>\';
        /**/
        ?>
<?php
    }
}
您可以将小部件注册到:

add_action( \'widgets_init\', \'register_unfiltered_text_widget\', 20 );

function register_unfiltered_text_widget()
{
    register_widget( \'Unfiltered_Text_Widget\' );
}
现在您在wp-admin/widgets.php:

widgets in backend

我只放了两个很酷的Youtube视频作为iframes和<hr> 进入小部件
输出:

widget output

SO网友:Carl Alberto

为了更新问题的答案,从我测试的WP 4.8站点开始,常规文本小部件现在可以通过简单地使用常规iframe标记以本机方式显示iframe:

<iframe src="https://iframesiteurl.com"></iframe>

结束

相关推荐

Iframe可以在一个页面上工作,但不能在一个页面上工作,为什么?

我试图将vimeo视频加载到一个页面中,但它告诉我:Given URL is not allowed by the Application configuration. 但在其他页面上,相同的iframe复制并粘贴到页面模板中,效果很好。<iframe src=\"http://player.vimeo.com/video/4426465\" width=\"400\" height=\"230\" frameborder=\"0\"></iframe>