it-swarm.com.de

Hinzufügen von Iframe-Inhalten zum Seitenleisten-Widget

Ich versuche, ein Amazon-Werbe-Widget in ein WordPress-Sidebar-Widget einzufügen (selbst gehostetes WordPress, Version 3.1.3). Der Widget-Code ist im Grunde ein Iframe.

Ich habe versucht, das Widget "Text" zu verwenden und den Iframe-Code dort einzufügen, aber wenn ich das Widget speichere, verschwindet der Iframe-Code.

Ich bin bereits auf dieses Problem/diese Einschränkung gestoßen und habe es mit dem IFrame-Widget gelöst. Ich möchte jedoch mehr als einen iFrame in meiner Seitenleiste verwenden, und das IFrame-Widget unterstützt jeweils nur ein Widget.

Vermisse ich etwas Offensichtliches? Gibt es eine Einstellung, um Iframe-Code in den Widgets zuzulassen? Oder ist es normalerweise erlaubt und ich habe etwas Dummes an meiner Installation getan? Wenn nicht, gibt es gute Workarounds?

6
Matt Gibson

Erstellen Sie einfach ein Widget, das Ihre Eingaben nicht filtert. Dies ist wahrscheinlich das einfachste Widget mit Benutzereingaben, das Sie erstellen können.

Hier ist das Widget, das ich in meinem Plugin Magic Widgets verwende.

/**
 * 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
    }
}

Sie registrieren das Widget mit:

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

function register_unfiltered_text_widget()
{
    register_widget( 'Unfiltered_Text_Widget' );
}

Jetzt erhalten Sie ein neues Widget in wp-admin/widgets.php:

widgets in backend

Ich habe nur zwei coole Youtube-Videos als iframes und einen <hr> in das Widget eingefügt.
Ausgabe:

widget output

8
fuxia

Zum Aktualisieren der fraglichen Antwort ab der von mir getesteten Site WP 4.8 kann das reguläre Text-Widget jetzt Iframes nativ anzeigen, indem einfach das reguläre Iframe-Tag verwendet wird:

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