ทำให้ WordPress WYSIWYG ไม่ได้ตัดออกจาก iframe


16

ฉันมีบล็อกที่มักต้องใส่ iframes ลงในโพสต์ด้วยเหตุผลต่าง ๆ (อย่าถามว่าทำไมแค่เชื่อฉัน!)

เมื่อฉันใช้มุมมอง "ภาพ" เพื่อแก้ไขโพสต์ของฉัน WYSIWYG constatantly จะตัดออก iframes ของฉัน ...

ฉันรู้ว่าฉันสามารถเก็บใน iframe ในการโพสต์ถ้าผมใช้ "HTML" มุมมองและมีเพียงดู / บันทึกจาก "HTML" มุมมอง ... แต่ฉันจริงๆต้องการที่จะสามารถที่จะใช้ WYSIWYG ปกติที่จะแก้ไขโพสต์ของฉันโดยไม่ต้องหันไปใช้มุมมอง "html"

มีสิ่งใดบ้างที่ฉันสามารถทำได้เพื่อปิดใช้งานพฤติกรรมนี้ ฉันเคยเห็นโพสต์นี้แสดงให้เห็นการแก้ไขwp-includes/js/tinymce/tiny_mce_config.phpแต่ฉันควรหลีกเลี่ยงการทำสิ่งที่น่าจะเป็นการอัพเกรด!


โพสต์คุณเชื่อมโยงไปยังมีตัวกรองโซลูชันที่ไม่แก้ไขโดย Otto คุณเคยลองไหม
Rarst

เพื่อชี้แจงเพิ่มเติมเล็กน้อยฉันไม่ต้องการแฮ็ค PHP ที่จะทำ (ฉันน่าจะลืมอัปเกรดและทำลายเนื้อหา) ... หากเป็นสิ่งที่มีการตั้งค่า (แม้ว่า IS ใน PHP) หรือ สิ่งที่ฉันสามารถทำได้โดยพูดโดยใส่โค้ดไว้รอบ ๆ iframe ของฉันซึ่งก็ใช้ได้เช่นกัน ณ จุดนี้ฉันจะใช้จาวาสคริปต์เพื่อทำ แต่ดูเหมือนว่าจะยุ่ง
Justin Jenkins

1
ไม่มีตัวเลือกการกำหนดค่าสำหรับสิ่งนี้และไม่มีวิธีการเขียนโค้ดในตัวแก้ไข (มันจะเป็นช่องโหว่ความปลอดภัยหากมีวิธีแก้ไข) การใส่รหัสที่กล่าวถึงในปลั๊กอินเป็นวิธีที่ดีที่สุดในการทำเช่นนี้และมันจะอยู่รอดได้ในการอัปเกรด (ปลั๊กอินจะไม่ถูกลบเมื่อคุณอัปเกรด)
Jan Fabry

@Jan หวังว่าจะมีคนที่รู้บางสิ่งบางอย่างที่เราไม่รู้ ... ถ้าไม่ขอบคุณ ดูเหมือนว่ามันจะเป็นรูวินาทีในส่วนภาพไม่ใช่ HTML ใช่ไหม ฉันเข้าใจว่ามันง่ายกว่าที่จะลื่นสิ่งต่าง ๆ ภายใต้จมูกของผู้คนในโหมดภาพ ... แต่ถึงกระนั้น
Justin Jenkins

iframesมีประโยชน์สำหรับการฝังวิดีโอ <object>วิธีการอาศัยอยู่กับแฟลชในขณะที่<iframe>วิธีการซึ่งส่วนใหญ่เว็บไซต์วิดีโอร่วมกันสนับสนุนวันนี้ช่วยให้วิดีโอ HTML5
TRiG

คำตอบ:


9

หากคุณไม่ต้องการที่จะเขียนรหัสของคุณเองมีปลั๊กอินที่อนุญาตให้ฝัง<iframe>:

จากนั้นใช้รหัสย่อแบบนี้:

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

@Ethan Seifert - คำตอบที่ดี!
MikeSchinkel

สิ่งนี้ใช้ได้กับคำถามของฉันไม่จำเป็นต้อง "แฮ็ค" ในขณะที่ยังคงต้องใช้มุมมอง HTML ... ขอบคุณ
Justin Jenkins

ปลั๊กอินในคำตอบนี้ไม่ทันสมัย ​​แต่อันนี้กลับดูดีแทน: wordpress.org/plugins/iframe
ทิมมาโลน

23

คุณสามารถปรับแต่งตัวกรองของ TinyMCE ดูตัวอย่างต่อไปนี้สำหรับ<iframe>s และแท็กอื่น ๆ เพื่อใช้ Google Maps ภายใน 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' );

เพิ่มสิ่งนี้ลงในปลั๊กอินหรือฟังก์ชั่นที่กำหนดเองของธีม นอกจากนี้คุณยังสามารถอ่านข้อมูลเพิ่มเติมในโพสต์ของฉัน: http://wpengineer.com/1963/customize-wordpress-wysiwyg-editor/


@bueltge - คำตอบที่ดี ฉันเพิ่งอ่านเว็บไซต์ของคุณว่าโพสต์เมื่อเร็ว ๆ นี้ คุณรู้ไหมว่าตัวอย่างส่วนใหญ่บนเว็บสำหรับ TinyMCE ไม่ได้อยู่ในบริบทของ WordPress และเมื่ออยู่ในบริบทของ WordPress มันมีความซับซ้อนมากขึ้น คุณเข้าใจมันชัดเจนดี ยังมีอีกมากที่คุณสามารถครอบคลุมเกี่ยวกับ TinyMCE; คุณเคยคิดทำบล็อกของบทความหรือไม่
MikeSchinkel

ปัญหาที่ยิ่งใหญ่ที่สุดของฉันคือเวลา; แต่ฉันมีอีกโพสต์ baout หัวข้อนี้ในร่างของฉันและฉันอาจจะโพสต์นี้ในสัปดาห์หน้า ขอบคุณสำหรับส่วยของคุณ
bueltge

1

ฉันต้องอัปเกรดเป็น wordpress 3.2.1 แล้วติดตั้ง Embed Iframe และใช้งานได้ดี

ข้อผิดพลาด iframe ไม่ได้ถูกลบอีกต่อไปเมื่อสลับไปมาจาก html เป็น Visual ใน wordpress


1

ในสภาพแวดล้อม MultiSite การทุกผู้ใช้อื่นที่ไม่ใช่ผู้ดูแลระบบระดับได้รับการกรอง HTML (เพราะช่องโหว่ความปลอดภัยที่อาจเกิดขึ้น ) จากนี้คุณสามารถเพิ่ม Add unfiltered_html ความสามารถให้กับบรรณาธิการ

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

หากคุณไม่ต้องการใช้ปลั๊กอินเพิ่มเติมสำหรับโซลูชันย่อคุณสามารถเพิ่มบางสิ่งตามบรรทัดเหล่านี้ในธีมปลั๊กอินหรือ function.php เพื่อเพิ่มด้วยมือ หากจำเป็นคุณอาจต้องเพิ่มคีย์เพิ่มเติมลงในคีย์ - อาเรย์

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

จากนั้นในหน้าโพสต์ของคุณการใช้จะเป็นดังนี้:

[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"]

มันไม่ทำงาน เพิ่งโพสต์ iframe เหมือนเนื้อหาเดียวกัน
Ankit Agrawal

ฉันไม่รู้ว่าคุณต้องการให้โค้ดทำอะไร แต่การโพสต์ iframe ในเนื้อหาตามที่คุณเขียนมันคือสิ่งที่ควรจะทำ ดังนั้นหาก iframe ปรากฏในมุมมองส่วนหน้าของคุณทุกอย่างทำงานได้ตามที่คาดไว้
SunnyRed

0

ฉันพบว่าการใช้ปลั๊กอิน Fusion Editor เพื่อสร้างหน้าของฉันใน Wordpress ทำงานได้ดี

วิดีโอนี้แสดงวิธีการใช้ Fusion Builder (ข้ามไปที่ 4:15 สำหรับส่วนที่เกี่ยวกับการเพิ่มคอนเทนเนอร์ Coloumns องค์ประกอบและบล็อครหัส): https://www.youtube.com/watch?v=UDyNsnB_COA

ฉันคลิกเพื่อเพิ่มคอนเทนเนอร์จากนั้นคลิกเพิ่มองค์ประกอบแล้วเพิ่มบล็อกรหัสแทนบล็อกข้อความ (บล็อกข้อความจะลบ iframe แต่บล็อกโค้ดจะไม่) ในบล็อครหัสของฉันฉันวางรหัส iframe และเผยแพร่ ใช้งานได้ดีและฉันไม่ต้องแก้ไขไฟล์ PHP ใด ๆ !

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.