Зробіть так, щоб WordPress WYSIWYG не знімав рамки рамки


16

У мене є блог, який мені часто потрібно вставляти iframe до публікацій з різних причин (не питайте, чому просто мені довіряєте!)

Коли я використовую "візуальний" погляд для редагування своїх публікацій, WYSIWYG постійно знімає мої рамки ...

Я знаю, що я можу зберігати iframes у публікації, якщо я використовую перегляд "html" і переглядаю / зберігаю лише з перегляду "html" ... однак я дуже хотів би мати можливість використовувати звичайний WYSIWYG для редагування своєї публікації не вдаючись до перегляду "html".

Чи можна щось зробити, щоб відключити цю поведінку? Я бачив цю публікацію , яка передбачає редагування wp-includes/js/tinymce/tiny_mce_config.php, але я дійсно вважаю за краще уникати такого подібного, що, ймовірно, просто зламається в оновлення!


Публікація, з якою ви пов’язані, також має рішення відредагувати фільтр від Otto. Ви спробували це?
Рарст

Щоб уточнити трохи більше, я б краще не зламати якийсь PHP, щоб це зробити (я, швидше за все, забуду про те, щоб оновити та зламати речі) ... якщо це налаштування (навіть якщо це в PHP) або що я можу зробити, сказавши, обернувши трохи коду навколо мого iframe, який також працював. На даний момент я, швидше за все, просто використовуватиму JavaScript, щоб зробити це, але це здається безладним.
Джастін Дженкінс

1
Для цього немає варіанту конфігурації, і ніякого способу кодування навколо нього в редакторі (це було б діркою для безпеки, якщо б існував спосіб вирішення). Поміщення згаданого коду в плагін - це найкращий спосіб зробити це, і він також переживе оновлення (додатки не видаляються під час оновлення).
Ян Фабрі

@Jan, сподіваючись, що хтось знає щось, чого ми не знаємо ... Якщо ні, дякую. Здається дивним, що це секційна дірка лише у візуальній частині, а не HTML? Я розумію, простіше ковзати речі під носом людей у ​​візуальному режимі ... Але все ж.
Джастін Дженкінс

iframesкорисні для вставки відео. <object>Метод заснований на спалахи, в той час як <iframe>метод, який більшість відео-сайти обміну підтримують ці дні, дозволяє HTML5 відео.
TRiG

Відповіді:


9

Якщо ви не хочете писати власний код, є плагін, який дозволяє вставляти <iframe>:

Тоді просто використовуйте такий короткий код :

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

@Ethan Seifert - приємна відповідь!
MikeSchinkel

Це дійсно стосується мого питання, не потрібно «хакерства». Хоча все-таки потрібно використовувати перегляд HTML ... Дякую.
Джастін Дженкінс

Плагін у цій відповіді більше не оновлюється, але замість цього виглядає добре: wordpress.org/plugins/iframe
Тім Малоун

23

Ви можете налаштувати фільтр TinyMCE, подивитися наступний приклад для <iframe>s та інших тегів для використання Карт Google у 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' );

Додайте це до користувацького плагіна або function.php теми. Також ви можете прочитати більше інформації в моєму дописі: http://wpengineer.com/1963/customize-wordpress-wysiwyg-editor/


@bueltge - приємна відповідь. Я щойно на вашому сайті читав цю публікацію раніше сьогодні. Ви знаєте, більшість прикладів для Інтернету для TinyMCE не в контексті WordPress, а коли в контексті WordPress це значно складніше. Ви добре це добре розумієте. Є багато іншого, що ви могли б висвітлити про TinyMCE; Ви думали про те, щоб зробити серію публікацій в блозі?
MikeSchinkel

моя найбільша проблема - час; але у мене є ще одна публікація цієї теми в моїх чернетках, і, можливо, я публікую це протягом наступних тижнів. Дякуємо за вашу данину
Бульдж

1

Мені довелося оновити до wordpress 3.2.1, а потім встановити Embed Iframe, і він працював чудово.

Теги iframe більше не видалялися при перемиканні назад і назад з html на Visual у wordpress.


1

У багатосайтовому середовищі кожен користувач, крім superadmin, отримує html-фільтрацію (через можливі вразливості безпеки ). Виходячи з цього, ви можете додати в редактори Додати нефільтроване_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 для частини про додавання контейнерів, стовпців, елементів та блоків коду): https://www.youtube.com/watch?v=UDyNsnB_COA

Я натискаю, щоб додати контейнер, потім клацніть елемент додавання, а потім додайте блок коду замість текстового блоку (текстовий блок видалить кадр, але блок коду не буде). У блоці коду я вставляю код iframe та публікую. Відмінно працює, і мені не потрібно змінювати файли PHP!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.