web-dev-qa-db-ja.com

サイドバーウィジェットへのiframeコンテンツの追加

私はAmazonの広告ウィジェットをWordPressサイドバーウィジェットに追加しようとしています(自己ホスト型WordPress、v3.1.3)。ウィジェットコードは基本的にiframeです。

"Text"ウィジェットを使ってそこにiframeコードを貼り付けようとしましたが、ウィジェットを保存すると、iframeコードが消えます。

私は以前この問題/制限に出会い、 IFrame Widget を使って解決しましたが、私はサイドバーで複数のiFrameを使いたいと思います、そしてIFrameウィジェットは一度に一つのウィジェットしかサポートしません。

明らかなものが足りないのですか。ウィジェットにiframeコードを許可する設定はありますか?それとも通常は許可されていますか、そして私は私のインストールに愚かな何かをしましたか?そうでない場合は、任意の良い回避策は?

6
Matt Gibson

入力をフィルタリングしないウィジェットを作成するだけです。これはおそらくあなたが作ることができるユーザ入力を持つ最も単純なウィジェットです。

これが私が私のプラグインで使用しているウィジェットです 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

私は2つのクールなYoutubeビデオをiframeと<hr>としてウィジェットに入れました。
出力:

widget output

8
fuxia

問題の答えを更新するために、私がテストしたWP 4.8サイトの時点で、通常のテキストウィジェットは、通常のiframeタグを使用するだけで、ネイティブでiframeを表示できるようになりました。

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