Evitar que el editor WYSIWYG de WordPress elimine los iframes

19 oct 2010, 10:13:21
Vistas: 26.1K
Votos: 17

Tengo un blog donde necesito insertar iframes en las publicaciones por varias razones (¡no preguntes por qué, solo confía en mí!)

Cuando uso la vista "visual" para editar mis publicaciones, el WYSIWYG constantemente elimina mis iframes...

Sé que puedo mantener los iframes en la publicación si uso la vista "html" y solo visualizo/guardo desde la vista "html"... sin embargo, me gustaría realmente poder usar el WYSIWYG normal para editar mi publicación sin tener que recurrir a la vista "html".

¿Hay algo que pueda hacer para deshabilitar este comportamiento? He visto esta publicación, que sugiere editar wp-includes/js/tinymce/tiny_mce_config.php, pero preferiría evitar hacer algo así que probablemente se rompa en una actualización!

6
Comentarios

La publicación que enlazaste también tiene una solución con filtros no editables de Otto. ¿Habías probado eso?

Rarst Rarst
19 oct 2010 10:25:25

Para aclarar un poco más, preferiría no tener que modificar código PHP para hacerlo (probablemente lo olvidaría, actualizaría y rompería cosas)... si es algo de configuración (aunque ESO esté en PHP) o algo que pueda hacer, digamos, envolviendo un poco de código alrededor de mi iframe, eso también funcionaría. En este punto probablemente solo usaré algo de javascript para hacerlo, pero parece poco elegante.

Justin Jenkins Justin Jenkins
19 oct 2010 10:28:37

No hay una opción de configuración para esto, y no hay forma de codear una solución en el editor (sería un agujero de seguridad si existiera una solución alternativa). Poner el código mencionado en un plugin es la mejor manera de hacer esto, y además sobrevivirá a las actualizaciones (los plugins no se eliminan cuando actualizas).

Jan Fabry Jan Fabry
19 oct 2010 11:58:59

@Jan, Mantengo la esperanza de que haya alguien que sepa algo que nosotros no sepamos... Si no, gracias. Parece extraño que sea un agujero de seguridad solo en la parte visual, no en el HTML. Entiendo que es más fácil colar cosas bajo la nariz de la gente en el modo visual... Pero aún así.

Justin Jenkins Justin Jenkins
19 oct 2010 12:38:02

Los iframes son útiles para incrustar videos. El método <object> depende de flash, mientras que el método <iframe>, que la mayoría de los sitios para compartir videos admiten hoy en día, permite el uso de video HTML5.

TRiG TRiG
23 jun 2011 19:47:36

Tengo el mismo problema, pero también se elimina en la vista de HTML. ¿Es esta una acción común de WordPress para eliminarlo o mi sitio sufre algún error?

User User
3 ene 2013 19:41:23
Mostrar los 1 comentarios restantes
Todas las respuestas a la pregunta 6
2
23

Puedes personalizar el filtro de TinyMCE, mira el siguiente ejemplo para <iframe>s y otras etiquetas para usar Google Maps dentro de TinyMCE.

function fb_change_mce_options( $initArray ) {

    // Cadena separada por comas de etiquetas extendidas.
    // Cadena separada por comas de elementos extendidos.
    $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;

    // Opcionalmente, establecer el parámetro tiny verify_html
    //$initArray['verify_html'] = false;

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

Añade esto a un plugin personalizado o al functions.php del tema. También puedes leer más información en mi post: http://wpengineer.com/1963/customize-wordpress-wysiwyg-editor/

19 oct 2010 22:40:57
Comentarios

@bueltge - Buena respuesta. Justo hoy estaba en tu sitio leyendo esa misma publicación. Sabes, la mayoría de los ejemplos en la web sobre TinyMCE no están en el contexto de WordPress y cuando están en el contexto de WordPress es significativamente más complicado. Claramente lo entiendes bien. Hay mucho más que podrías cubrir sobre TinyMCE; ¿has considerado hacer una serie de publicaciones en un blog sobre esto?

MikeSchinkel MikeSchinkel
21 oct 2010 11:49:11

mi mayor problema es el tiempo; pero tengo otra publicación sobre este tema en mis borradores y tal vez la publique en las próximas semanas. Gracias por tu tributo.

bueltge bueltge
23 oct 2010 11:38:27
3

Si no deseas escribir tu propio código, existe un plugin que permite incrustar un <iframe>:

Luego simplemente usa el shortcode de esta manera:

[iframe http://example.com 400 500]
21 oct 2010 06:15:29
Comentarios

@Ethan Seifert - ¡Buena respuesta!

MikeSchinkel MikeSchinkel
21 oct 2010 11:47:22

Esto realmente aplica a mi pregunta, sin necesidad de "hackear". Aunque todavía necesito usar la vista HTML... Gracias.

Justin Jenkins Justin Jenkins
29 oct 2010 11:40:01

El plugin en esta respuesta ya no está actualizado, pero este otro parece bueno en su lugar: https://wordpress.org/plugins/iframe/

Tim Malone Tim Malone
12 abr 2016 10:11:56
0

Tuve que actualizar a WordPress 3.2.1 y luego instalé Embed Iframe y funcionó perfectamente.

Las etiquetas iframe ya no se eliminaban al cambiar de html a Visual en WordPress.

26 oct 2011 09:04:41
0

En un entorno multisitio, todos los usuarios que no sean superadministradores reciben filtrado de HTML (debido a posibles vulnerabilidades de seguridad). Basándote en esto, puedes añadir la capacidad unfiltered_html a los editores.

/**
 * Habilita la capacidad unfiltered_html para los Editores.
 *
 * @param  array  $caps    Las capacidades del usuario.
 * @param  string $cap     Nombre de la capacidad.
 * @param  int    $user_id El ID del usuario.
 * @return array  $caps    Las capacidades del usuario, con 'unfiltered_html' potencialmente añadida.
 */
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 );
7 nov 2017 14:09:11
2

Si no te gusta usar un plugin adicional para la solución de shortcode, puedes añadir algo como esto a tu tema, plugin o functions.php para agregarlo manualmente. Si es necesario, quizás debas añadir más claves al array de claves.

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;
}

Luego, en tu página de publicación, el uso sería así:

[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"]
27 may 2013 19:58:53
Comentarios

no está funcionando. solo está publicando el iframe como el mismo contenido

Ankit Agrawal Ankit Agrawal
17 dic 2018 14:28:21

No sé qué quieres que haga el código, pero publicar el iframe en el contenido como lo has escrito, es lo que se supone que debe hacer el código. Entonces, si el iframe aparece en tu vista del frontend, todo funciona como se esperaba.

SunnyRed SunnyRed
18 dic 2018 01:32:15
0

Descubrí que usar el plugin Fusion Editor para construir mis páginas en WordPress funciona bien.

Este video muestra cómo usar Fusion Builder (avanza hasta el minuto 4:15 para la parte sobre agregar contenedores, columnas, elementos y bloques de código): https://www.youtube.com/watch?v=UDyNsnB_COA

Hago clic para agregar un contenedor, luego hago clic en agregar elemento, y luego agrego un bloque de código en lugar de un bloque de texto (el bloque de texto eliminará un iframe, pero un bloque de código no). En mi bloque de código pego mi código iframe y publico. ¡Funciona genial y no tengo que modificar ningún archivo PHP!

1 oct 2018 23:32:59