Impedire a WordPress WYSIWYG di rimuovere gli iframe
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!
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/

@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?

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]

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

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

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

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&source=s_q&hl=de&geocode=&q=New+York+City,+New+York,+USA&aq=0&oq=new+york&sll=51.238455,6.81435&sspn=0.373151,1.056747&ie=UTF8&hq=&hnear=New+York+City,+New+York,+Vereinigte+Staaten&t=m&z=11&iwloc=A&output=embed"]

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

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!
