Faire en sorte que WordPress WYSIWYG ne supprime pas les iframes

16

J'ai un blog dont j'ai souvent besoin d'insérer des iframes dans les messages pour diverses raisons (ne demandez pas pourquoi faites-moi confiance!)

Lorsque j'utilise la vue "visuelle" pour modifier mes messages, le WYSIWYG supprime constamment mes iframes ...

Je sais que je peux conserver les iframes dans le message si j'utilise la vue "html" et que je ne vois / enregistre que dans la vue "html" ... mais j'aimerais vraiment pouvoir utiliser le WYSIWYG normal pour modifier mon message sans avoir à recourir à la vue "html".

Puis-je faire quelque chose pour désactiver ce comportement? J'ai vu ce post , qui suggère une édition wp-includes/js/tinymce/tiny_mce_config.php, mais je préfère vraiment éviter de faire quelque chose comme ça qui se casserait probablement dans une mise à niveau!

Justin Jenkins
la source
Le post auquel vous êtes lié a également une solution de filtre non éditable par Otto. Aviez-vous essayé cela?
Rarst
Pour clarifier un peu plus, je préfère ne pas avoir à pirater du PHP pour le faire (j'oublierais probablement, mettre à niveau et casser des trucs) ... si c'est une chose de paramètres (même si c'est en PHP) ou quelque chose que je peux faire en disant, enrouler un peu de code autour de mon iframe qui fonctionnerait aussi. À ce stade, je vais probablement utiliser du javascript pour le faire, mais cela semble désordonné.
Justin Jenkins
1
Il n'y a pas d'option de configuration pour cela, et aucun moyen de le coder dans l'éditeur (ce serait une faille de sécurité s'il existait une solution de contournement). Mettre le code mentionné dans un plugin est le meilleur moyen de le faire, et il survivra également aux mises à niveau (les plugins ne sont pas supprimés lors de la mise à niveau).
Jan Fabry
@Jan, Tenir espoir qu'il y a quelqu'un qui sait quelque chose que nous ne savons pas ... Sinon, merci. Semble étrange que ce soit un trou sec uniquement sur la partie visuelle, pas le HTML? Je comprends qu'il est plus facile de glisser des choses sous le nez des gens en mode visuel ... Mais quand même.
Justin Jenkins
iframessont utiles pour intégrer des vidéos. La <object>méthode repose sur le flash, tandis que la <iframe>méthode, que la plupart des sites de partage de vidéos prennent en charge de nos jours, permet la vidéo HTML5.
TRiG

Réponses:

9

Si vous ne voulez pas écrire votre propre code, il existe un plugin pour permettre l'incorporation d'un <iframe>:

Ensuite, utilisez simplement le shortcode comme ceci:

[iframe http://example.com 400 500]
Ethan Seifert
la source
@Ethan Seifert - Belle réponse!
MikeSchinkel
Cela s'applique vraiment à ma question, aucun "piratage" requis. Tout en ayant besoin d'utiliser la vue HTML ... Merci.
Justin Jenkins
Le plugin dans cette réponse n'est plus à jour, mais celui-ci semble plutôt bien: wordpress.org/plugins/iframe
Tim Malone
23

Vous pouvez personnaliser le filtre de TinyMCE, voir l'exemple suivant pour les <iframe>s et autres balises pour utiliser Google Maps dans TinyMCE.

function fb_change_mce_options( $initArray ) {

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

    if ( isset( $initArray['extended_valid_elements'] ) ) {
        $ext = ',' . $ext;
    }
    $initArray['extended_valid_elements'] = $ext;

    // Maybe, set tiny parameter verify_html
    //$initArray['verify_html'] = false;

    return $initArray;
}
add_filter( 'tiny_mce_before_init', 'fb_change_mce_options' );

Ajoutez ceci à un plugin personnalisé ou à functions.php du thème. Vous pouvez également lire plus d'informations dans mon article: http://wpengineer.com/1963/customize-wordpress-wysiwyg-editor/

bueltge
la source
@bueltge - Belle réponse. J'étais juste sur votre site en train de lire ce post très tôt dans la journée. Vous savez, la plupart des exemples sur le Web pour TinyMCE ne sont pas dans le contexte de WordPress et quand dans le contexte de WordPress, c'est beaucoup plus compliqué. Vous le comprenez bien. Il y a beaucoup plus que vous pourriez couvrir sur TinyMCE; avez-vous envisagé de faire une série d'articles sur ce blog?
MikeSchinkel
mon plus gros problème est le temps; mais j'ai un autre post sur ce sujet dans mes brouillons et peut-être le posterai-je dans les prochaines semaines. Merci pour votre hommage.
bueltge
1

J'ai dû passer à wordpress 3.2.1, puis j'ai installé Embed Iframe et cela a très bien fonctionné.

Les tages iframe n'étaient plus supprimés lors du passage de html à Visual dans wordpress.

WordpressDude
la source
1

Dans un environnement multisite, tous les utilisateurs autres que les superadmin bénéficient d'un filtrage html (en raison de failles de sécurité potentielles ). Sur cette base, vous pouvez ajouter Ajouter une capacité unfiltered_html aux éditeurs.

/**
 * Enable unfiltered_html capability for Editors.
 *
 * @param  array  $caps    The user's capabilities.
 * @param  string $cap     Capability name.
 * @param  int    $user_id The user ID.
 * @return array  $caps    The user's capabilities, with 'unfiltered_html' potentially added.
 */
function km_add_unfiltered_html_capability_to_editors( $caps, $cap, $user_id ) {
    if ( 'unfiltered_html' === $cap && user_can( $user_id, 'editor' ) ) {
        $caps = array( 'unfiltered_html' );
    }
    return $caps;
}
add_filter( 'map_meta_cap', 'km_add_unfiltered_html_capability_to_editors', 1, 3 );
docker
la source
0

Si vous n'aimez pas utiliser un plugin supplémentaire pour la solution de shortcode, vous pouvez ajouter quelque chose dans ce sens à votre thème, plugin ou functions.php pour l'ajouter à la main. Si nécessaire, vous devrez peut-être ajouter d'autres clés au tableau de clés.

add_shortcode( 'iframe' , 'mycustom_shortcode_iframe' );
function mycustom_shortcode_iframe($args, $content) {
    $keys = array("src", "width", "height", "scrolling", "marginwidth", "marginheight", "frameborder");
    $arguments = mycustom_extract_shortcode_arguments($args, $keys);
    return '<iframe ' . $arguments . '></iframe>';
}

function mycustom_extract_shortcode_arguments($args, $keys) {
    $result = "";
    foreach ($keys as $key) {
        if (isset($args[$key])) {
            $result .= $key . '="' . $args[$key] . '" ';
        }
    }
    return $result;
}

Ensuite, dans votre page de publication, l'utilisation serait la suivante:

[iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://maps.google.de/maps?f=q&amp;source=s_q&amp;hl=de&amp;geocode=&amp;q=New+York+City,+New+York,+USA&amp;aq=0&amp;oq=new+york&amp;sll=51.238455,6.81435&amp;sspn=0.373151,1.056747&amp;ie=UTF8&amp;hq=&amp;hnear=New+York+City,+New+York,+Vereinigte+Staaten&amp;t=m&amp;z=11&amp;iwloc=A&amp;output=embed"]
SunnyRed
la source
ça ne fonctionne pas. il suffit de publier l'iframe comme même contenu
Ankit Agrawal
Je ne sais pas ce que vous voulez que le code fasse, mais poster l'iframe dans le contenu tel que vous l'avez écrit, c'est ce que le code est censé faire. Donc, si l'iframe apparaît dans votre vue frontend, tout fonctionne comme prévu.
SunnyRed
0

J'ai trouvé que l'utilisation du plugin Fusion Editor pour créer mes pages dans Wordpress fonctionne bien.

Cette vidéo montre comment utiliser Fusion Builder (passez à 4:15 pour la partie sur l'ajout de conteneurs, de colonnes, d'éléments et de blocs de code): https://www.youtube.com/watch?v=UDyNsnB_COA

Je clique pour ajouter un conteneur, puis je clique sur Ajouter un élément, puis j'ajoute un bloc de code au lieu d'un bloc de texte (le bloc de texte supprimera un iframe, mais pas un bloc de code). Dans mon bloc de code, je colle mon code iframe et le publie. Fonctionne très bien et je n'ai pas à modifier de fichiers PHP!

Brandon Barney
la source