Cum să păstrezi iframe-urile în editorul WYSIWYG WordPress

19 oct. 2010, 10:13:21
Vizualizări: 26.1K
Voturi: 17

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!

6
Comentarii

Postarea pe care ai dat link-ul are și o soluție fără filtru de editare de la Otto. Ai încercat și aceasta?

Rarst Rarst
19 oct. 2010 10:25:25

Ca să clarific puțin mai mult, aș prefera să nu fie nevoie să modific niște cod PHP pentru asta (aș putea uita de el, să fac upgrade și să stric lucruri)... dacă e ceva în setări (chiar dacă ASTA este în PHP) sau ceva ce pot face, de exemplu, prin înfășurarea unui cod în jurul iframe-ului meu, ar funcționa și așa. În acest moment, probabil voi folosi niște javascript pentru asta, dar pare cam neîngrijit.

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

Nu există nicio opțiune de configurare pentru asta și niciun mod de a ocoli problema în editor (ar fi o breșă de securitate dacă ar exista vreo soluție alternativă). Introducerea codului menționat într-un plugin este cea mai bună metodă de a face asta și va supraviețui și la upgrade-uri (plugin-urile nu sunt șterse când faci upgrade).

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

@Jan, Păstrez speranța că există cineva care știe ceva ce noi nu știm... Dacă nu, mulțumesc. Pare ciudat că este o vulnerabilitate de securitate doar în partea vizuală, nu și în HTML? Înțeleg că este mai ușor să strecori lucruri pe sub nasul oamenilor în modul vizual... Dar totuși.

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

iframes sunt utile pentru încorporarea videoclipurilor. Metoda <object> se bazează pe flash, în timp ce metoda <iframe>, care este acceptată în zilele noastre de majoritatea site-urilor de partajare video, permite utilizarea videoclipurilor HTML5.

TRiG TRiG
23 iun. 2011 19:47:36

Am aceeași problemă, dar este eliminat și în vizualizarea HTML. Aceasta este o acțiune obișnuită pentru WordPress de a elimina acest lucru sau site-ul meu suferă de o eroare?

User User
3 ian. 2013 19:41:23
Arată celelalte 1 comentarii
Toate răspunsurile la întrebare 6
2
23

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/

19 oct. 2010 22:40:57
Comentarii

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

MikeSchinkel MikeSchinkel
21 oct. 2010 11:49:11

cea mai mare problemă a mea este timpul; dar am un alt post despre acest subiect în drafturile mele și poate îl public în următoarele săptămâni. Mulțumesc pentru apreciere.

bueltge bueltge
23 oct. 2010 11:38:27
3

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]
21 oct. 2010 06:15:29
Comentarii

@Ethan Seifert - Răspuns bun!

MikeSchinkel MikeSchinkel
21 oct. 2010 11:47:22

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.

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

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

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

A trebuit să fac upgrade la WordPress 3.2.1 și apoi am instalat Embed Iframe, care a funcționat perfect.

Tag-urile iframe nu mai erau eliminate când treceam din html în Visual și invers în WordPress.

26 oct. 2011 09:04:41
0

Î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 );
7 nov. 2017 14:09:11
2

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&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 mai 2013 19:58:53
Comentarii

nu funcționează. doar postează iframe-ul ca același conținut

Ankit Agrawal Ankit Agrawal
17 dec. 2018 14:28:21

Nu știu ce vrei să facă codul, dar postarea iframe-ului în conținut așa cum l-ai scris, este exact ceea ce ar trebui să facă codul. Deci, dacă iframe-ul apare în vizualizarea ta de frontend, totul funcționează conform așteptărilor.

SunnyRed SunnyRed
18 dec. 2018 01:32:15
0

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!

1 oct. 2018 23:32:59