Impedire a WordPress WYSIWYG di rimuovere gli iframe

19 ott 2010, 10:13:21
Visualizzazioni: 26.1K
Voti: 17

Ho un blog in cui ho spesso bisogno di inserire iframe nei post per vari motivi (non chiedete perché, fidatevi!)

Quando uso la visualizzazione "visuale" per modificare i miei post, il WYSIWYG rimuove costantemente i miei iframe...

So che posso mantenere gli iframe nel post se uso la visualizzazione "html" e visualizzo/salvo solo dalla vista "html"... tuttavia vorrei davvero poter utilizzare il normale WYSIWYG per modificare il mio post senza dover ricorrere alla visualizzazione "html".

C'è qualcosa che posso fare per disabilitare questo comportamento? Ho visto questo post, che suggerisce di modificare wp-includes/js/tinymce/tiny_mce_config.php, ma preferirei evitare di fare qualcosa del genere che probabilmente si romperebbe con un aggiornamento!

6
Commenti

Il post che hai linkato ha anche una soluzione con filtro non modificabile di Otto. L'hai provata?

Rarst Rarst
19 ott 2010 10:25:25

Per chiarire un po' meglio, preferirei non dover modificare del codice PHP per farlo (probabilmente me ne dimenticherei, farei un aggiornamento e romperei qualcosa)... se fosse una questione di impostazioni (anche se QUELLA è in PHP) o qualcosa che posso fare, ad esempio, avvolgendo un po' di codice attorno al mio iframe, andrebbe bene lo stesso. A questo punto probabilmente userò del javascript per farlo, ma sembra un po' approssimativo.

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

Non c'è un'opzione di configurazione per questo, e nessun modo di aggirarlo nell'editor (sarebbe un buco di sicurezza se esistesse un workaround). Inserire il codice menzionato in un plugin è il modo migliore per farlo, e sopravviverà anche agli aggiornamenti (i plugin non vengono eliminati quando fai un aggiornamento).

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

@Jan, Spero che ci sia qualcuno che sappia qualcosa che noi non sappiamo... Altrimenti, grazie. Sembra strano che sia un buco di sicurezza solo nella parte visiva, non nell'HTML? Capisco che è più facile far passare cose sotto il naso delle persone in modalità visiva... Ma comunque.

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

I iframe sono utili per incorporare video. Il metodo <object> si basa su flash, mentre il metodo <iframe>, che la maggior parte dei siti di condivisione video supporta oggigiorno, permette di utilizzare video HTML5.

TRiG TRiG
23 giu 2011 19:47:36

Ho lo stesso problema, ma viene rimosso anche nella visualizzazione HTML. È un'azione comune per WordPress rimuoverlo o il mio sito soffre di qualche bug?

User User
3 gen 2013 19:41:23
Mostra i restanti 1 commenti
Tutte le risposte alla domanda 6
2
23

Puoi personalizzare il filtro di TinyMCE, guarda il seguente esempio per i tag <iframe> e altri per utilizzare Google Maps all'interno di TinyMCE.

function fb_change_mce_options( $initArray ) {

    // Stringa separata da virgole dei tag estesi
    // Stringa separata da virgole degli elementi estesi
    $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;

    // Opzionalmente, imposta il parametro tiny verify_html
    //$initArray['verify_html'] = false;

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

Aggiungi questo codice a un plugin personalizzato o al functions.php del tema. Puoi anche leggere maggiori informazioni nel mio articolo: http://wpengineer.com/1963/customize-wordpress-wysiwyg-editor/

19 ott 2010 22:40:57
Commenti

@bueltge - Bella risposta. Ero proprio sul tuo sito a leggere quel post oggi stesso. Sai, la maggior parte degli esempi sul web per TinyMCE non sono nel contesto di WordPress e quando sono nel contesto di WordPress è significativamente più complicato. Tu lo comprendi chiaramente bene. C'è molto altro che potresti coprire su TinyMCE; hai considerato di fare una serie di post sul blog al riguardo?

MikeSchinkel MikeSchinkel
21 ott 2010 11:49:11

il mio problema più grande è il tempo; ma ho un altro post su questo argomento tra le bozze e forse lo pubblicherò nelle prossime settimane. Grazie per il tuo tributo.

bueltge bueltge
23 ott 2010 11:38:27
3

Se non vuoi scrivere il tuo codice, esiste un plugin che permette di incorporare un <iframe>:

Poi basta usare lo shortcode in questo modo:

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

@Ethan Seifert - Bella risposta!

MikeSchinkel MikeSchinkel
21 ott 2010 11:47:22

Questo si applica perfettamente alla mia domanda, senza bisogno di "hacking". Pur dovendo ancora utilizzare la vista HTML... Grazie.

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

Il plugin in questa risposta non è più aggiornato, ma questo sembra valido come alternativa: https://wordpress.org/plugins/iframe/

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

Ho dovuto aggiornare a WordPress 3.2.1 e poi ho installato Embed Iframe e ha funzionato alla grande.

I tag iframe non venivano più rimossi quando si passava da html a Visual in WordPress.

26 ott 2011 09:04:41
0

In un ambiente multisito, ogni utente diverso dal superadmin riceve un filtraggio HTML (a causa di potenziali vulnerabilità di sicurezza). Sulla base di questo puoi aggiungere la capacità unfiltered_html agli editor.

/**
 * Abilita la capacità unfiltered_html per gli Editor.
 *
 * @param  array  $caps    Le capacità dell'utente.
 * @param  string $cap     Nome della capacità.
 * @param  int    $user_id L'ID dell'utente.
 * @return array  $caps    Le capacità dell'utente, con 'unfiltered_html' eventualmente aggiunto.
 */
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

Se non vuoi utilizzare un plugin aggiuntivo per la soluzione con shortcode, puoi aggiungere qualcosa di simile al tuo tema, plugin o functions.php per implementarlo manualmente. Se necessario, potresti dover aggiungere altre chiavi all'array delle chiavi.

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

Quindi nella tua pagina di articolo, l'utilizzo sarebbe così:

[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 mag 2013 19:58:53
Commenti

non funziona. sta solo pubblicando l'iframe come stesso contenuto

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

Non so cosa vuoi che il codice faccia, ma pubblicare l'iframe nel contenuto come l'hai scritto è esattamente ciò che il codice dovrebbe fare. Quindi, se l'iframe appare nella tua visualizzazione frontend, tutto funziona come previsto.

SunnyRed SunnyRed
18 dic 2018 01:32:15
0

Ho scoperto che utilizzare il plugin Fusion Editor per costruire le mie pagine in WordPress funziona bene.

Questo video mostra come utilizzare Fusion Builder (salta al minuto 4:15 per la parte relativa all'aggiunta di container, colonne, elementi e blocchi di codice): https://www.youtube.com/watch?v=UDyNsnB_COA

Faccio clic per aggiungere un container, poi clicco su aggiungi elemento e seleziono un blocco di codice invece di un blocco di testo (il blocco di testo rimuoverebbe un iframe, mentre il blocco di codice no). Nel mio blocco di codice incollo il codice dell'iframe e pubblico. Funziona perfettamente e non devo modificare alcun file PHP!

1 ott 2018 23:32:59