Fai in modo che WordPress WYSIWYG non elimini gli iframe


16

Ho un blog che spesso devo inserire iframe nei post per vari motivi (non chiedermi perché fidati di me!)

Quando uso la vista "visiva" per modificare i miei post, il WYSIWYG elimina costantemente i miei iframe ...

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

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


I post a cui sei collegato hanno anche una soluzione di filtro non modifica di Otto. L'hai provato?
Raro il

Per chiarire un po 'di più, preferirei non dover hackerare un po' di PHP per farlo (probabilmente mi dimenticherei, aggiornerei e romperei le cose) ... se è una cosa di impostazioni (anche se quella è in PHP) o qualcosa che posso fare dicendo, avvolgendo un po 'di codice attorno al mio iframe che funzionerebbe anche. A questo punto probabilmente userò solo un po 'di javascript per farlo, ma sembra disordinato.
Justin Jenkins,

1
Non esiste un'opzione di configurazione per questo, e nessun modo per codificarlo nell'editor (sarebbe un buco di sicurezza se esistesse una soluzione alternativa). Inserire il codice citato in un plugin è il modo migliore per farlo e sopravviverà anche agli aggiornamenti (i plugin non vengono eliminati quando si aggiorna).
Jan Fabry,

@Giovanni, sperando che ci sia qualcuno che sa qualcosa che non sappiamo ... Altrimenti, grazie. Sembra strano che sia un secondo buco solo sulla parte visiva, non sull'HTML? Capisco che è più facile far scivolare le cose sotto il naso delle persone in modalità visiva ... Ma comunque.
Justin Jenkins,

iframessono utili per incorporare video. Il <object>metodo si basa sul flash, mentre il <iframe>metodo, che la maggior parte dei siti di condivisione video supporta in questi giorni, consente il video HTML5.
TRiG,

Risposte:


9

Se non vuoi scrivere il tuo codice, c'è un plugin per consentire l'incorporamento di un <iframe>:

Quindi usa lo shortcode in questo modo:

[iframe http://example.com 400 500]

@Ethan Seifert - Bella risposta!
MikeSchinkel,

Questo vale davvero per la mia domanda, non è richiesto alcun "hacking". Pur continuando a dover usare la vista HTML ... Grazie.
Justin Jenkins,

Il plugin in questa risposta non è più aggiornato, ma questo sembra piuttosto buono: wordpress.org/plugins/iframe
Tim Malone

23

È possibile personalizzare il filtro di TinyMCE, vedere l'esempio seguente per se <iframe>e altri tag per utilizzare Google Maps all'interno di 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' );

Aggiungi questo a un plug-in personalizzato o Functions.php del tema. Inoltre puoi leggere ulteriori informazioni nel mio post: http://wpengineer.com/1963/customize-wordpress-wysiwyg-editor/


@bueltge - Bella risposta. Ero sul tuo sito a leggere quel post molto prima oggi. Sai, la maggior parte degli esempi sul web per TinyMCE non sono nel contesto di WordPress e quando nel contesto di WordPress è significativamente più complicato. Lo capisci chiaramente bene. C'è molto di più che potresti coprire su TinyMCE; hai pensato di fare una serie di post sul blog?
MikeSchinkel,

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

1

Ho dovuto aggiornare a wordpress 3.2.1 e quindi installare Embed Iframe e ha funzionato benissimo.

Le tage iframe non sono più state rimosse quando si passa da html a Visual in wordpress.


1

In ambiente multisito tutti gli utenti diversi da superadmin ottengono il filtro html (a causa delle potenziali vulnerabilità di sicurezza ). Sulla base di questo è possibile aggiungere Aggiungi capacità unfiltered_html agli editor.

/**
 * 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 );

0

Se non ti piace usare un plug-in aggiuntivo per la soluzione shortcode, puoi aggiungere qualcosa lungo queste linee al tuo tema, plug-in o funzioni.php per aggiungerlo manualmente. Se necessario, potrebbe essere necessario aggiungere altre chiavi all'array di 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 post, 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"]

la sua non funziona. sta solo pubblicando l'iframe come lo stesso contenuto
Ankit Agrawal,

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

0

Ho scoperto che l'utilizzo del plug-in Fusion Editor per creare le mie pagine in Wordpress funziona bene.

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

Faccio clic per aggiungere un contenitore, quindi faccio clic su Aggiungi elemento, quindi aggiungo un blocco di codice anziché un blocco di testo (il blocco di testo rimuoverà un iframe, ma un blocco di codice no). Nel mio blocco di codice incollo il mio codice iframe e lo pubblico. Funziona alla grande e non devo modificare alcun file PHP!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.