Buat WordPress WYSIWYG tidak menghapus iframe

16

Saya memiliki blog yang sering harus saya masukkan iframe ke dalam posting karena berbagai alasan (jangan tanya kenapa hanya percaya padaku!)

Ketika saya menggunakan tampilan "visual" untuk mengedit posting saya, WYSIWYG secara konstan menghapus iframe saya ...

Saya tahu saya dapat menyimpan iframe di pos jika saya menggunakan tampilan "html" dan hanya melihat / menyimpan dari tampilan "html" ... namun saya benar - benar ingin dapat menggunakan WYSIWYG normal untuk mengedit posting saya tanpa harus menggunakan tampilan "html".

Apakah ada yang bisa saya lakukan untuk menonaktifkan perilaku ini? Saya telah melihat posting ini , yang menunjukkan pengeditan wp-includes/js/tinymce/tiny_mce_config.php, tetapi saya benar-benar lebih suka menghindari melakukan sesuatu seperti itu yang mungkin hanya akan merusak upgrade!

Justin Jenkins
sumber
Posting yang Anda tautkan juga memiliki solusi filter non-edit oleh Otto. Sudahkah Anda mencobanya?
Jarang
Untuk memperjelas lebih banyak, saya lebih suka tidak perlu meretas PHP untuk melakukannya (saya mungkin akan melupakan, memutakhirkan dan memecah barang-barang) ... jika itu adalah pengaturan (bahkan jika itu dalam PHP) atau sesuatu yang bisa saya lakukan dengan mengatakan, membungkus sedikit kode di sekitar iframe saya yang akan berhasil juga. Pada titik ini saya mungkin hanya akan menggunakan beberapa javascript untuk melakukannya, tetapi itu tampak berantakan.
Justin Jenkins
1
Tidak ada opsi konfigurasi untuk ini, dan tidak ada cara untuk kode di sekitarnya di editor (itu akan menjadi lubang keamanan jika ada solusi). Menempatkan kode yang disebutkan dalam plugin adalah cara terbaik untuk melakukan ini, dan itu juga akan bertahan dari peningkatan (plugin tidak dihapus ketika Anda meningkatkan).
Jan Fabry
@ Jan, Mengulurkan harapan ada seseorang yang tahu sesuatu yang kita tidak tahu ... Jika tidak, terima kasih. Tampaknya aneh bahwa itu adalah lubang kedua hanya pada bagian visual, bukan pada HTML? Saya mengerti lebih mudah untuk menyelipkan sesuatu di bawah hidung orang dalam mode visual ... Tapi tetap saja.
Justin Jenkins
iframesberguna untuk menyematkan video. The <object>Metode bergantung pada flash, sedangkan <iframe>metode, yang sebagian besar situs video-sharing mendukung hari ini, memungkinkan untuk video HTML5.
TRiG

Jawaban:

9

Jika Anda tidak ingin menulis kode Anda sendiri, ada plugin untuk mengizinkan penyematan <iframe>:

Kemudian gunakan saja kode pendek seperti ini:

[iframe http://example.com 400 500]
Ethan Seifert
sumber
@Ethan Seifert - Jawaban yang bagus!
MikeSchinkel
Ini benar-benar berlaku untuk pertanyaan saya, tidak diperlukan "peretasan". Sementara masih perlu menggunakan tampilan HTML ... Terima kasih.
Justin Jenkins
Plugin dalam jawaban ini tidak lagi mutakhir, tetapi yang ini kelihatannya bagus: wordpress.org/plugins/iframe
Tim Malone
23

Anda dapat menyesuaikan filter TinyMCE, lihat contoh berikut untuk <iframe>tag dan lainnya untuk menggunakan Google Maps di dalam 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' );

Tambahkan ini ke plugin kustom atau functions.php dari tema. Anda juga dapat membaca informasi lebih lanjut di posting saya: http://wpengineer.com/1963/customize-wordpress-wysiwyg-editor/

bueltge
sumber
@bueltge - Jawaban yang bagus. Saya baru saja di situs Anda membaca posting yang sangat awal hari ini. Anda tahu, sebagian besar contoh di web untuk TinyMCE tidak dalam konteks WordPress dan ketika dalam konteks WordPress secara signifikan lebih rumit. Anda jelas mengerti dengan baik. Ada banyak lagi yang bisa Anda liput tentang TinyMCE; Sudahkah Anda mempertimbangkan untuk melakukan serangkaian posting blog?
MikeSchinkel
masalah terbesar saya adalah waktu; tetapi saya memiliki posting lain tentang topik ini dalam konsep saya dan mungkin saya memposting ini di minggu-minggu berikutnya. Terima kasih atas upeti Anda.
bueltge
1

Saya harus memutakhirkan ke wordpress 3.2.1 dan kemudian menginstal Embed Iframe dan bekerja dengan baik.

Tages iframe tidak lagi dihapus ketika beralih bolak-balik dari html ke Visual di wordpress.

WordpressDude
sumber
1

Dalam lingkungan multisite, setiap pengguna selain superadmin mendapatkan pemfilteran html (karena kerentanan keamanan potensial ). Berdasarkan ini, Anda dapat menambahkan Tambahkan unfiltered_html Kemampuan untuk 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 );
buruh pelabuhan
sumber
0

Jika Anda tidak suka menggunakan plugin tambahan untuk solusi shortcode, Anda dapat menambahkan sesuatu di sepanjang baris ini ke tema, plugin atau functions.php Anda untuk menambahkannya dengan tangan. Jika perlu, Anda mungkin perlu menambahkan beberapa kunci lagi ke array-kunci.

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

Kemudian di halaman posting Anda, penggunaannya akan seperti ini:

[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"]
SunnyRed
sumber
ini tidak bekerja. itu hanya memposting iframe sebagai konten yang sama
Ankit Agrawal
Saya tidak tahu apa yang Anda ingin kode lakukan, tetapi memposting iframe dalam konten seperti yang Anda tulis, adalah apa yang seharusnya dilakukan oleh kode tersebut. Jadi, jika iframe muncul di tampilan frontend Anda, semuanya berfungsi seperti yang diharapkan.
SunnyRed
0

Saya menemukan bahwa menggunakan plugin Fusion Editor untuk membangun halaman saya di Wordpress berfungsi dengan baik.

Video ini menunjukkan cara menggunakan Fusion Builder (lewati ke 4:15 untuk bagian tentang menambahkan wadah, kolom, elemen, dan blok kode): https://www.youtube.com/watch?v=UDyNsnB_COA

Saya klik untuk menambahkan wadah, lalu klik tambahkan elemen, dan kemudian tambahkan blok kode alih-alih blok teks (blok teks akan menghapus iframe, tetapi blok kode tidak akan). Di blok kode saya, saya tempel kode iframe saya dan publikasikan. Bekerja dengan baik dan saya tidak perlu memodifikasi file PHP apa pun!

Brandon Barney
sumber