web-dev-qa-db-fra.com

Lors du passage de HTML à Visual Editor, la balise <iframe> est corrompue

J'essaie d'intégrer un iFrame et, comme j'ai configuré certains CSS à l'aide de responsive design, je ne souhaite PAS avoir d'attributs width="" et height="".

Quand je tape ceci dans le champ de l'éditeur HTML ..

<iframe src="https://docs.google.com/document/pub?id=1fsm-cvpdfX-8tXauGrQgRmgWONTpX8J3almvZhzBeCA&amp;embedded=true" class="scale-with-grid"></iframe>

Et puis je passe en mode visuel et reviens, il supprime immédiatement le class="scale-with-grid" et le change en width="320" height="240"

<iframe src="https://docs.google.com/document/pub?id=1fsm-cvpdfX-8tXauGrQgRmgWONTpX8J3almvZhzBeCA&amp;embedded=true" width="320" height="240"></iframe>

Comment puis-je éviter cela? J'ai utilisé ce plugin "Raw HTML" mais cela ne s'appliquait absolument pas à cette situation d'iframe.

5
jeffkee

Par défaut, la balise iframe est une balise non autorisée dans l'éditeur. Vous devez modifier le filtre pour autoriser cette balise HTML. Copiez la source suivante dans un plugin et autorisez l'iframe pour l'éditeur TinyMCE.

add_filter( 'tiny_mce_before_init', 'fb_change_mce_options' );
function fb_change_mce_options( $tags ) {

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

    if ( isset( $tags['extended_valid_elements'] ) )
        $tags['extended_valid_elements'] .= ',' . $ext;
    else
        $tags['extended_valid_elements'] = $ext;

    return $tags;
}
1
bueltge

Vous pourriez utiliser un iframe-shortcode. Voici un petit plugin pour permettre cela:

<?php
! defined( 'ABSPATH' ) AND exit;
/** Plugin Name: (#62729) Shortcode to display an iframe */

function wpse62729_allow_iframes_tinymce( $attr )
{
    global $post;

    $attr = shortcode_atts( array(
         'src'          => ''
        ,'width'        => '100%'
        ,'height'       => '100%'
        ,'name'         => md5( $post->post_title )
        ,'scrolling'    => 'no'
        ,'marginheight' => 0
        ,'marginwidth'  => 0
        ,'frameborder'  => 0
        ,'align'        => is_rtl() ? 'right' : 'left'
    ), $attr );

    $html = "<iframe";
    foreach ( $attr as $key => $val )
    {
        $html .= " {$key}='{$val}'";
    }
    $html .= "><p>";
    // Message if not possible to display iframe
    $html .= sprinft( 
        'Displaying the iframe is not possible. View the %ssource following this link%s.'
        ,"<a href='{$attr['src']}' target='_blank'>"
        ,"</a>"
    );
    $html .= "</p></iframe>";

    return $html;
}
add_shortcode( 'iframe', 'wpse62729_allow_iframes_tinymce' );
1
kaiser