Làm cho WordPress WYSIWYG không loại bỏ iframe


16

Tôi có một blog mà tôi thường cần chèn iframe vào bài viết vì nhiều lý do (đừng hỏi tại sao chỉ tin tôi!)

Khi tôi sử dụng chế độ xem "trực quan" để chỉnh sửa các bài đăng của mình, WYSIWYG liên tục loại bỏ các iframe của tôi ...

Tôi biết tôi có thể giữ iframe trong bài đăng nếu tôi sử dụng chế độ xem "html" và chỉ xem / lưu từ chế độ xem "html" ... tuy nhiên tôi thực sự muốn có thể sử dụng WYSIWYG bình thường để chỉnh sửa bài đăng của mình mà không cần phải dùng đến chế độ xem "html".

Có bất cứ điều gì tôi có thể làm để vô hiệu hóa hành vi này? Tôi đã xem bài đăng này , điều đó gợi ý chỉnh sửa wp-includes/js/tinymce/tiny_mce_config.php, nhưng tôi thực sự muốn tránh làm điều gì đó như thế có thể sẽ phá vỡ trong một bản nâng cấp!


Bài đăng bạn liên kết đến cũng có giải pháp lọc không chỉnh sửa của Otto. Bạn đã thử nó chưa?
Hết

Để làm rõ hơn một chút, tôi không cần phải hack một số PHP để làm điều đó (tôi có thể quên, nâng cấp và phá vỡ mọi thứ) ... nếu đó là một điều cài đặt (ngay cả khi đó là trong PHP) hoặc một cái gì đó tôi có thể làm bằng cách nói, bọc một chút mã xung quanh iframe của tôi cũng sẽ hoạt động. Tại thời điểm này tôi có thể sẽ chỉ sử dụng một số javascript để làm điều đó, nhưng điều đó có vẻ lộn xộn.
Justin Jenkins

1
Không có tùy chọn cấu hình cho điều này và không có cách nào để mã xung quanh nó trong trình chỉnh sửa (nó sẽ là một lỗ hổng bảo mật nếu có một cách giải quyết khác). Đặt mã được đề cập trong một plugin là cách tốt nhất để làm điều này và nó cũng sẽ tồn tại các bản nâng cấp (các plugin không bị xóa khi bạn nâng cấp).
Jan Fabry

@Jan, Hy vọng có ai đó biết điều mà chúng ta không biết ... Nếu không, cảm ơn. Có vẻ kỳ lạ rằng đó chỉ là một lỗ hổng trên phần hình ảnh chứ không phải HTML? Tôi hiểu rằng dễ dàng hơn để trượt mọi thứ dưới mũi của mọi người trong chế độ trực quan ... Nhưng vẫn vậy.
Justin Jenkins

iframesrất hữu ích để nhúng video. Các <object>phương pháp dựa trên flash, trong khi các <iframe>phương pháp, mà hầu hết các trang web chia sẻ video hỗ trợ những ngày này, cho phép cho HTML5 video.
TRiG

Câu trả lời:


9

Nếu bạn không muốn viết mã của riêng mình, có một plugin để cho phép nhúng <iframe>:

Sau đó, chỉ cần sử dụng shortcode như thế này:

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

@Ethan Seifert - Câu trả lời hay!
MikeSchinkel

Điều này thực sự áp dụng cho câu hỏi của tôi, không yêu cầu "hack". Trong khi vẫn cần sử dụng chế độ xem HTML ... Cảm ơn.
Justin Jenkins

Plugin trong câu trả lời này không còn cập nhật nữa, nhưng cái này có vẻ tốt hơn: wordpress.org/plugins/iframe
Tim Malone

23

Bạn có thể tùy chỉnh bộ lọc của TinyMCE, xem ví dụ sau cho <iframe>s và các thẻ khác để sử dụng Google Maps bên trong 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' );

Thêm phần này vào một plugin tùy chỉnh hoặc hàm.php của chủ đề. Ngoài ra, bạn có thể đọc thêm thông tin trong bài viết của tôi: http://wpengineer.com/1963/customize-wordpress-wysiwyg-editor/


@bueltge - Câu trả lời hay. Tôi vừa mới vào trang của bạn đọc mà rất đăng bài hôm nay. Bạn biết đấy, hầu hết các ví dụ trên web cho TinyMCE không nằm trong bối cảnh của WordPress và khi trong bối cảnh của WordPress thì nó phức tạp hơn đáng kể. Bạn hiểu rất rõ điều đó. Có rất nhiều điều bạn có thể nói về TinyMCE; Bạn đã xem xét làm một loạt các bài viết trên blog?
MikeSchinkel

vấn đề lớn nhất của tôi là thời gian; nhưng tôi có một bài đăng khác làm hỏng chủ đề này trong bản nháp của tôi và có thể tôi sẽ đăng bài này trong tuần tới. Cảm ơn sự vinh danh của bạn.
bueltge

1

Tôi đã phải nâng cấp lên wordpress 3.2.1 và sau đó cài đặt Embed Iframe và nó hoạt động rất tốt.

Các thao tác iframe không còn bị xóa khi chuyển đổi qua lại từ html sang Visual trong wordpress.


1

Trong môi trường nhiều trang, mọi người dùng khác ngoài superadmin đều được lọc html (vì các lỗ hổng bảo mật tiềm ẩn ). Dựa trên điều này, bạn có thể thêm Thêm khả năng không lọc_html Khả năng cho các biên tập viên.

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

Nếu bạn không muốn sử dụng một plugin bổ sung cho giải pháp shortcode, bạn có thể thêm một cái gì đó dọc theo các dòng này vào chủ đề, plugin hoặc hàm.php của bạn để thêm nó bằng tay. Nếu không cần thiết, bạn có thể cần thêm một số khóa vào mảng khóa.

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

Sau đó, trong trang bài viết của bạn, việc sử dụng sẽ như vậy:

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

nó không hoạt động. nó chỉ đăng iframe như cùng một nội dung
Ankit Agrawal

Tôi không biết bạn muốn mã làm gì, nhưng đăng iframe trong nội dung như bạn đã viết, đó là những gì mã phải làm. Vì vậy, nếu iframe xuất hiện trong giao diện lối vào của bạn, mọi thứ sẽ hoạt động như mong đợi.
SunnyRed

0

Tôi thấy rằng sử dụng plugin Fusion Editor để xây dựng các trang của mình trong Wordpress hoạt động tốt.

Video này cho biết cách sử dụng Fusion Builder (bỏ qua 4:15 cho phần về cách thêm container, cột, phần tử và khối mã): https://www.youtube.com/watch?v=UDyNsnB_COA

Tôi bấm để thêm một thùng chứa, sau đó bấm thêm phần tử, rồi thêm một khối mã thay vì một khối văn bản (khối văn bản sẽ xóa một iframe, nhưng một khối mã sẽ không). Trong khối mã của tôi, tôi dán mã iframe của mình và xuất bản. Hoạt động rất tốt và tôi không phải sửa đổi bất kỳ tệp PHP nào!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.