Cum să păstrezi iframe-urile în editorul WYSIWYG WordPress
Am un blog în care trebuie să inserez adesea iframe-uri în postări din diverse motive (nu întrebați de ce, aveți încredere în mine!)
Când folosesc vizualizarea "vizuală" pentru a edita postările mele, editorul WYSIWYG elimină constant iframe-urile...
Știu că pot păstra iframe-urile în postare dacă folosesc vizualizarea "html" și vizualizez/salvez doar din modul "html"... totuși, aș dori foarte mult să pot folosi editorul WYSIWYG normal pentru a edita postarea mea fără a fi nevoit să recurg la vizualizarea "html".
Există vreo modalitate de a dezactiva acest comportament? Am văzut această postare, care sugerează editarea fișierului wp-includes/js/tinymce/tiny_mce_config.php
, dar aș prefera să evit să fac așa ceva deoarece ar putea să se strice la o actualizare!
Puteți personaliza filtrul TinyMCE, următorul exemplu vă arată cum să permiteți tag-uri precum <iframe>
și altele pentru a utiliza Google Maps în interiorul editorului TinyMCE.
function fb_change_mce_options( $initArray ) {
// Șir de caractere separați prin virgulă pentru tag-uri extinse.
// Șir de caractere separați prin virgulă pentru elemente extinse.
$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;
// Opțional, setați parametrul tiny verify_html
//$initArray['verify_html'] = false;
return $initArray;
}
add_filter( 'tiny_mce_before_init', 'fb_change_mce_options' );
Adăugați acest cod într-un plugin personalizat sau în functions.php al temei. De asemenea, puteți citi mai multe informații în articolul meu: http://wpengineer.com/1963/customize-wordpress-wysiwyg-editor/

@bueltge - Răspuns frumos. Tocmai eram pe site-ul tău citind exact acel articol mai devreme astăzi. Știi, majoritatea exemplelor de pe internet pentru TinyMCE nu sunt în contextul WordPress, iar când sunt în contextul WordPress, sunt semnificativ mai complicate. Tu înțelegi foarte bine subiectul. Sunt multe alte aspecte pe care ai putea să le acoperi despre TinyMCE; te-ai gândit să faci o serie de articole pe blog despre asta?

Dacă nu dorești să scrii propriul cod, există un plugin care permite încorporarea unui <iframe>
:
Apoi poți folosi shortcode-ul astfel:
[iframe http://example.com 400 500]

Acest lucru se aplică într-adevăr la întrebarea mea, fără a fi nevoie de "hacking". În timp ce încă mai trebuie să folosesc vizualizarea HTML... Mulțumesc.

Plugin-ul din acest răspuns nu mai este actualizat, dar acesta pare bun în schimb: https://wordpress.org/plugins/iframe/

În mediul multisite, fiecare utilizator în afară de superadmin primește filtrare HTML (din cauza vulnerabilităților de securitate potențiale). Bazat pe acest lucru, poți adăuga capabilitatea unfiltered_html editorilor.
/**
* Activează capabilitatea unfiltered_html pentru Editori.
*
* @param array $caps Capabilitățile utilizatorului.
* @param string $cap Numele capabilității.
* @param int $user_id ID-ul utilizatorului.
* @return array $caps Capabilitățile utilizatorului, cu 'unfiltered_html' potențial adăugat.
*/
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 );

Dacă nu doriți să folosiți un plugin suplimentar pentru soluția cu shortcode-uri, puteți adăuga ceva similar în tema, într-un plugin sau în functions.php pentru a-l implementa manual. Dacă este necesar, poate fi nevoie să adăugați mai multe chei în array-ul de chei.
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;
}
Apoi, în pagina de postare, utilizarea ar arăta astfel:
[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"]

Am descoperit că utilizarea plugin-ului Fusion Editor pentru a construi paginile mele în Wordpress funcționează foarte bine.
Acest videoclip arată cum să folosești Fusion Builder (sari la minutul 4:15 pentru partea despre adăugarea de containere, coloane, elemente și blocuri de cod): https://www.youtube.com/watch?v=UDyNsnB_COA
Fac clic pentru a adăuga un container, apoi fac clic pentru a adăuga un element și selectez un bloc de cod în loc de un bloc de text (blocul de text va elimina un iframe, dar blocul de cod nu). În blocul meu de cod lipesc codul iframe și public. Funcționează perfect și nu trebuie să modific niciun fișier PHP!
