Faça com que o WordPress WYSIWYG não retire o iframe

16

Eu tenho um blog que muitas vezes preciso inserir iframes em postagens por vários motivos (não pergunte por que apenas confie em mim!)

Quando uso a visualização "visual" para editar minhas postagens, o WYSIWYG retira constantemente meus iframes ...

Sei que posso manter os iframes na postagem se usar a visualização "html" e exibir / salvar apenas da visualização "html" ... no entanto, eu realmente gostaria de poder usar o WYSIWYG normal para editar minha postagem sem ter que recorrer à exibição "html".

Há algo que eu possa fazer para desativar esse comportamento? Eu já vi esse post , que sugere edição wp-includes/js/tinymce/tiny_mce_config.php, mas eu prefiro evitar fazer algo assim que provavelmente acabaria em uma atualização!

Justin Jenkins
fonte
A postagem que você vinculou também possui uma solução de filtro sem edição da Otto. Você já tentou isso?
Rarst
Para esclarecer um pouco mais, prefiro não precisar hackear um pouco de PHP (provavelmente esquecerei, atualizarei e quebrarei coisas) ... se for uma coisa de configurações (mesmo que seja em PHP) ou algo que posso dizer, envolvendo um pouco de código em torno do meu iframe que funcionaria também. Neste ponto, provavelmente vou usar apenas javascript para fazer isso, mas isso parece confuso.
9308 Justin Jenkins
11
Não há opção de configuração para isso e não há como codificá-la no editor (seria uma falha de segurança se houvesse uma solução alternativa). Colocar o código mencionado em um plug-in é a melhor maneira de fazer isso e também sobreviverá a atualizações (os plug-ins não são excluídos quando você atualiza).
Jan Fabry
@ Jan, Esperando que haja alguém que saiba algo que não sabemos ... Se não, obrigado. Parece estranho que seja um segundo furo apenas na parte visual, não no HTML? Eu entendo que é mais fácil deslizar as coisas sob o nariz das pessoas no modo visual ... Mas ainda assim.
perfil completo de Justin Jenkins
iframessão úteis para incorporar vídeos. O <object>método depende do flash, enquanto o <iframe>método, que a maioria dos sites de compartilhamento de vídeo suporta atualmente, permite vídeo em HTML5.
TRiG 23/06

Respostas:

9

Se você não quiser escrever seu próprio código, existe um plugin para permitir a incorporação de <iframe>:

Em seguida, basta usar o shortcode como este:

[iframe http://example.com 400 500]
Ethan Seifert
fonte
@ Ethan Seifert - Boa resposta!
precisa saber é o seguinte
Isso realmente se aplica à minha pergunta, não é necessário "hacking". Enquanto ainda precisa usar a visualização HTML ... Obrigado.
9308 Justin Jenkins
O plugin nesta resposta não está mais up-to-date é, mas este parece ser bom em vez disso: wordpress.org/plugins/iframe
Tim Malone
23

Você pode personalizar o filtro do TinyMCE. Consulte o exemplo a seguir para se <iframe>outras tags para usar o Google Maps no 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' );

Adicione isso a um plug-in personalizado ou functions.php do tema. Além disso, você pode ler mais informações no meu post: http://wpengineer.com/1963/customize-wordpress-wysiwyg-editor/

bueltge
fonte
@bueltge - Boa resposta. Eu estava no seu site lendo essa mesma postagem hoje cedo. Você sabe, a maioria dos exemplos na Web do TinyMCE não está no contexto do WordPress e, quando no contexto do WordPress, é significativamente mais complicado. Você claramente entende bem. Você pode falar muito mais sobre o TinyMCE; você já pensou em fazer uma série de postagens nele?
precisa saber é o seguinte
meu maior problema é o tempo; mas eu tenho outro post sobre este tópico nos meus rascunhos e talvez eu o publique nas próximas semanas. Obrigado pela sua homenagem.
bueltge
1

Eu tive que atualizar para o wordpress 3.2.1 e, em seguida, instalei o Embed Iframe e funcionou muito bem.

Os iframe tages não foram mais removidos ao alternar entre html e Visual no wordpress.

WordpressDude
fonte
1

No ambiente multissite, todos os usuários, exceto o superadmin, recebem filtragem html (devido a possíveis vulnerabilidades de segurança ). Com base nisso, você pode adicionar Adicionar capacidade não filtrada_html aos editores.

/**
 * 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 );
estivador
fonte
0

Se você não gosta de usar um plug-in adicional para a solução de shortcode, pode adicionar algo nesse sentido ao seu tema, plugin ou functions.php para adicioná-lo manualmente. Se necessário, pode ser necessário adicionar mais algumas chaves à matriz de chaves.

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

Em seguida, na sua página de postagem, o uso seria o seguinte:

[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
fonte
não está funcionando. é só postar o iframe como mesmo conteúdo
Ankit Agrawal
Não sei o que você deseja que o código faça, mas postar o iframe no conteúdo conforme você o escreveu, é o que o código deve fazer. Portanto, se o iframe aparecer na exibição do frontend, tudo funcionará conforme o esperado.
SunnyRed
0

Eu descobri que usar o plugin Fusion Editor para criar minhas páginas no Wordpress funciona bem.

Este vídeo mostra como usar o Fusion Builder (pule para 4:15 da parte sobre adição de contêineres, colunas, elementos e blocos de código): https://www.youtube.com/watch?v=UDyNsnB_COA

Clique para adicionar um contêiner, clique em adicionar elemento e, em seguida, adicione um bloco de código em vez de um bloco de texto (o bloco de texto removerá um iframe, mas o bloco de código não). No meu bloco de código, colo meu código iframe e publico. Funciona muito bem e não preciso modificar nenhum arquivo PHP!

Brandon Barney
fonte