justinjenkins
  • 0
Новичок

Заставить WordPress WYSIWYG не удалять iframe

  • 0

У меня есть блог, в котором мне часто приходится вставлять фреймы в сообщения по разным причинам (не спрашивайте, почему, просто поверьте мне!)

Когда я использую «визуальный» вид для редактирования своих сообщений, WYSIWYG постоянно удаляет мои фреймы…

Я знаю, что могу сохранить iframes в сообщении, если я использую представление «html» и только просматриваю/сохраняю представление «html»… однако мне бы очень хотелось иметь возможность использовать обычный WYSIWYG для редактирования моего сообщения без необходимости прибегать к представлению «html».

Могу ли я что-нибудь сделать, чтобы отключить это поведение? Я видел этот пост, который предлагает редактирование wp-includes/js/tinymce/tiny_mce_config.php, но я действительно предпочел бы не делать что-то подобное, что, вероятно, просто сломает обновление!

Share
  1. Сообщение, на которое вы ссылаетесь, также имеет решение для фильтрации без редактирования от Отто. Вы пробовали это?

    • 0
  2. Если вы не хотите писать свой собственный код, есть плагин, позволяющий встраивать <iframe> :

    Затем просто используйте шорткод следующим образом:

    [iframe http://example.com 400 500]
    
    • 0
  3. Вы можете настроить фильтр 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' );
    

    Добавьте это в пользовательский плагин или functions.php темы. Также вы можете прочитать больше информации в моем посте: http://wpengineer.com/1963/customize-wordpress-wysiwyg-editor/

    • 0
  4. Мне пришлось перейти на WordPress 3.2.1, а затем установить Embed Iframe, и он отлично работал.

    Теги iframe больше не удалялись при переключении с html на Visual в wordpress и обратно.

    • 0
  5. В многосайтовой среде каждый пользователь, кроме суперадминистратора, получает HTML-фильтрацию (из-за потенциальных уязвимостей безопасности ). На основании этого вы можете добавить в редакторы возможность добавления 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
  6. Если вам не нравится использовать дополнительный плагин для решения шорткода, вы можете добавить что-то в этом роде в свою тему, плагин или functions.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"]
    
    • 0
  7. Я обнаружил, что использование плагина Fusion Editor для создания моих страниц в WordPress работает хорошо.

    В этом видео показано, как использовать Fusion Builder (перейдите к 4:15 части о добавлении контейнеров, столбцов, элементов и блоков кода): https://www.youtube.com/watch?v=UDyNsnB_COA.

    Я нажимаю, чтобы добавить контейнер, затем нажимаю «Добавить элемент», а затем добавляю блок кода вместо текстового блока (текстовый блок удалит iframe, а блок кода — нет). В моем блоке кода я вставляю свой код iframe и публикую. Работает отлично, и мне не нужно изменять какие-либо файлы PHP!

    • 0

Оставить ответ

You must login to add an answer.