私はAmazonの広告ウィジェットをWordPressサイドバーウィジェットに追加しようとしています(自己ホスト型WordPress、v3.1.3)。ウィジェットコードは基本的にiframeです。
"Text"ウィジェットを使ってそこにiframeコードを貼り付けようとしましたが、ウィジェットを保存すると、iframeコードが消えます。
私は以前この問題/制限に出会い、 IFrame Widget を使って解決しましたが、私はサイドバーで複数のiFrameを使いたいと思います、そしてIFrameウィジェットは一度に一つのウィジェットしかサポートしません。
明らかなものが足りないのですか。ウィジェットにiframeコードを許可する設定はありますか?それとも通常は許可されていますか、そして私は私のインストールに愚かな何かをしましたか?そうでない場合は、任意の良い回避策は?
入力をフィルタリングしないウィジェットを作成するだけです。これはおそらくあなたが作ることができるユーザ入力を持つ最も単純なウィジェットです。
これが私が私のプラグインで使用しているウィジェットです 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
に新しいウィジェットができました:
私は2つのクールなYoutubeビデオをiframeと<hr>
としてウィジェットに入れました。
出力:
問題の答えを更新するために、私がテストしたWP 4.8サイトの時点で、通常のテキストウィジェットは、通常のiframeタグを使用するだけで、ネイティブでiframeを表示できるようになりました。
<iframe src="https://iframesiteurl.com"></iframe>