Imagens não estão sendo publicadas no Discourse no WP 5.3

I’m guessing this is related to the changes to blocks in the 5.3 update. You can see the post here: In Conversation with Anna Morgan - In Layers: Conversations - Nature Photographers Network

FYI I also have this snippet for CDN images

add_filter( 'wp_discourse_excerpt', 'wpdc_custom_excerpt' );
function wpdc_custom_excerpt( $content ) {
    
    return apply_filters( 'as3cf_filter_post_local_to_s3', $content );
}

I am also getting this error in my dashboard which I’m fairly certain is from the Wordpress plugin.

I came across this post WP Discourse plug in being odd but I am on 1.9.7 and the publishing username is an active account.

I’ll be looking into this today. What I’m seeing on my site is that images published from WordPress are displayed correctly until Discourse attempts to download the remote image. When that is done, I’m ending up with markup like you are getting in the post:

![](upload://kw9YUV5qtquQf5xwatRof6S9RmK.jpeg)

I am not sure if this is related to changes in WordPress 5.3.

If you are getting the We detected an API request using a deprecated authentication method warning, that will not be causing the issue you are having with images. WP Discourse versions 1.9.6 and greater should not be causing that warning. All API requests from the plugin are now using header based authentication.

The problem seems to be that when the Discourse upload markdown is wrapped in HTML tags, the markdown isn’t getting parsed. For example, this is what I’m seeing for a WordPress post after the Discourse PullHotlinkedImages Job is run:

<small>Originally published at:			https://scossar.com/figure-tags-cause-issues/
		</small><br>
<figure class="wp-block-image">![](upload://3hPHOMnM5v5srjlz5QWGmVxY4AL.jpeg)</figure>

Editing the post to remove any html tags that are surrounding the markdown link solves the issue, but a proper solution will need to be found for this.

Sorry to bug, but are you working on this Simon or has someone been assigned to it?

The issue is that when posts with images are published to Discourse, the post’s HTML initially looks something like this:

<figure><img src="https://example.com/wp-content/uploads/your-image.png" /></figure>

If the download remote images to local site setting is enabled on Discourse, the image link will break when Discourse downloads the post from WordPress. The problem will happen any time an image tag with a remote URL is wrapped with HTML tags.

The easiest solutions for this issue are to either disable the download remote images to local site setting, or to not publish full post content from WordPress to Discourse.

In the future, the WP Discourse plugin may remove the option to publish full posts. There are multiple issues that can occurr when publishing full post content from WordPress to Discourse. Most of these issues should be able to be solved by publishing excerpts from WordPress to Discourse and then using the Show Full Post button to display the full post on Discourse. Does this sound like something that could work for your case?

Another possible solution would be to customize the template that is used to publish WordPress posts. Images could be extracted from the posts and then published along with a post excerpt. With a custom template, the image HTML could be structured in a way that doesn’t conflict with the Discourse markdown processor.

Thanks Simon, download remote images to local was the easy solution for now. I am discouraged to hear that publish full posts may go away. The way I currently use it is by publishing a post to wordpress, which then gets published to the Articles section on discourse, which is set to Watching First Post for everyone by default. This way everyone gets an email with the full content of the article, and the best part is they can just reply to the email to add a comment, if they have to take that extra step of visiting the site it’s likely most won’t read the article if there’s just a little snippet, especially if it doesn’t have images which is really important for our site. If publish full posts went away I may consider going away from wordpress and only publish the articles directly in discourse which is not ideal for SEO, etc. but I think the engagement is more important.

Eu sentiria falta de uma publicação completa também.
Não tenho 100% de certeza do que você está sugerindo aqui…
Como você extrairia as imagens? Com uma expressão regular?
Consigo imaginar uma expressão regular que substituiria as tags de imagem pela sintaxe Markdown adequada. É isso que você quer dizer e isso funcionaria?

Não. Eu teria tentado isso se não tivesse já experimentado esse tipo de coisa no passado. Esta postagem no Stack Overflow explica em parte o problema: https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454.

Vou investigar o quão difícil seria para o plugin montar uma versão HTML básica do conteúdo da postagem. A abordagem de último recurso seria usar os métodos do DOMDocument para analisar o conteúdo. Os comentários retornados pelo Discourse são analisados com esses métodos e não tenho recebido relatos de problemas com isso.

Acho que publicar um resumo e, em seguida, permitir que os usuários visualizem a postagem completa clicando no botão “Mostrar Postagem Completa” no Discourse é provavelmente a melhor solução para isso, mas estou relutante em remover a opção “Publicar postagem completa” do plugin WP Discourse.

Obrigado pela explicação.
Vou pedir aos meus autores que simplesmente publiquem o artigo e cliquem em “atualizar”, já que publicar e depois atualizar o artigo no WP parece sempre corrigir as imagens no Discourse.

Prefiro que meus autores gastem mais 1 segundo em cada artigo do que ver a opção de publicação completa desaparecer :wink:

Se você tiver a configuração do site do Discourse baixar imagens remotas para local habilitada, a imagem não desaparece novamente alguns minutos após a atualização da postagem? Se não for esse o caso, vou investigar por que isso resolve o problema.

Eu tenho essa configuração ativada e as imagens continuam sendo exibidas corretamente em todos os meus artigos mais recentes, mesmo após dias e semanas. Exemplo com um artigo de 1 mês no qual encontrei o problema com as imagens.

Além disso, verifiquei as URLs das imagens no lado do Discourse e os links são os mesmos do WordPress, então as imagens não são baixadas para o Discourse. Será que é porque o site e o fórum compartilham o mesmo domínio?
(site: https://monocycle.info, fórum: https://forum.monocycle/info)

Ainda estou recebendo uma miniatura grande e quebrada em vez da imagem ao atualizar o tópico no Discourse. Quando edito a postagem, vejo o seguinte entre < >:

img src="http://mysite.com/wp-content/uploads/2020/03/asha2.jpg" class="ss-hidden-pin-image" alt="Blog" data-pin-url="" data-pin-media="http://mysite.com/wp-content/uploads/2020/03/asha2.jpg" data-pin-description=""/

Seu site WordPress é http ou https?

No momento é http, embora eu esteja analisando o https.

Os navegadores não carregam conteúdo de fontes inseguras se a página for HTTPS.

Se você estiver dependendo de um elemento HTML para carregar a imagem, isso não funcionará até que seu site principal use HTTPS.

Acabei de enviar a versão 2.0.2 do WP Discourse para o repositório de plugins do WordPress. A atualização deve corrigir o problema com imagens quebradas que ocorria quando as publicações eram enviadas para o Discourse usando o editor de blocos.

Imagens, galerias de imagens, bem como vídeos do YouTube e Vimeo, agora são extraídos das publicações e formatados de maneira que o Discourse possa processar. Avise-me se encontrar algum problema com a atualização. Se ainda houver blocos do WordPress que não estão sendo renderizados corretamente no Discourse, me avise — os blocos agora podem ser analisados por nome, o que deve permitir resolver quaisquer problemas.

Na próxima semana, adicionarei um filtro que poderá ser conectado para analisar qualquer bloco muito obscuro para ser tratado pelo plugin.

Estou com alguns problemas aqui após a atualização.

No WP, estou usando o “editor clássico” (tinymce).

Eu tinha artigos antigos com URLs de vídeo nos shortcodes [video] e meus artigos mais recentes (com menos de 3 anos) usavam o plugin ARVE video embedder, que coloca a URL do vídeo dentro de um shortcode [arve].
Então, filtrei os posts do WP para o Discourse com o seguinte:

    $excerpt = preg_replace('/\[arve .*url="(.*?)" .*\/\]/is',"\n$1\n", $excerpt);
    $excerpt = preg_replace('/\[video .*mp4="(.*)"\]\[\/video\]/is',"\n$1\n", $excerpt);

Funcionava perfeitamente e apenas as URLs dos vídeos eram passadas para o Discourse, então eles apareciam incorporados no Discourse.

Mas desde a atualização do WP-Discourse, os vídeos não estão aparecendo no Discourse.
Também tentei simplesmente colar a URL do YouTube no tinymce, sem shortcode (aprendi que nenhum shortcode é necessário para o WP incorporar vídeos do YouTube de alguma forma… Ou talvez seja por causa de um dos meus outros plugins ou do meu tema? :thinking: Mas acho que isso não importa), e removendo minhas funções preg_replace, mas o vídeo ainda não aparece no Discourse.

Aqui está meu texto no WP (texto simples, não na aba wysiwyg):

https://www.youtube.com/watch?v=e6MCkspqtxo

[arve url="https://www.youtube.com/watch?v=e6MCkspqtxo" /]

Como aparece no WP:

Post no Discourse:

Código HTML do post no Discourse:

<p>Teste de vídeo:</p>
<div data-mode="normal" data-provider="youtube">
<div></div>
</div>
<div data-mode="normal" data-provider="youtube">
<div></div>
</div>

edit: também, notei que quando o artigo é privado no WP, ele não sincroniza no Discourse quando editamos o artigo. Isso é um pouco chato quando queremos fazer alguns testes em privado.

Isso é estranho. Minha esperança com a alteração era que ela não afetasse postagens publicadas com o editor Clássico. Vou tentar reproduzir o problema. Você pode compartilhar o código-fonte que você vê ao abrir a postagem na aba Texto do editor?

Com o plugin WP ARVE

<p>Teste de vídeo:</p>
<div class="arve-wrapper aligncenter" data-mode="normal" data-provider="youtube" id="arve-e6MCkspqtxo-3" style="max-width:800px;" itemscope itemtype="http://schema.org/VideoObject">
<div class="arve-embed-container" style="padding-bottom:56.250000%"><iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen class="arve-iframe fitvidsignore" frameborder="0" name sandbox="allow-scripts allow-same-origin allow-presentation allow-popups allow-popups-to-escape-sandbox" scrolling="no" src="https://www.youtube-nocookie.com/embed/e6MCkspqtxo?iv_load_policy=3&#038;modestbranding=1&#038;rel=0&#038;autohide=1&#038;playsinline=1&#038;autoplay=0" width="480" height="270"></iframe></div>
</div>
<div class="arve-wrapper aligncenter" data-mode="normal" data-provider="youtube" id="arve-e6MCkspqtxo-4" style="max-width:800px;" itemscope itemtype="http://schema.org/VideoObject"><div class="arve-embed-container" style="padding-bottom:56.250000%"><iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen class="arve-iframe fitvidsignore" frameborder="0" name sandbox="allow-scripts allow-same-origin allow-presentation allow-popups allow-popups-to-escape-sandbox" scrolling="no" src="https://www.youtube-nocookie.com/embed/e6MCkspqtxo?iv_load_policy=3&#038;modestbranding=1&#038;rel=0&#038;autohide=1&#038;playsinline=1&#038;autoplay=0" width="480" height="270"></iframe></div></div>

Sem o plugin, se eu apenas escrever no WP:

https://www.youtube.com/watch?v=e6MCkspqtxo

O editor do Discourse mostra este resultado:

<p>Teste de vídeo:</p>
<div class="fitvids-video"><iframe title="Volkor X - Enclave" width="800" height="450" src="https://www.youtube.com/embed/e6MCkspqtxo?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div>

Parece que o WP ainda está usando outra biblioteca não nativa, talvez do meu tema? :thinking:
Acho que o problema está mais do meu lado do que do seu, mas funcionava bem antes da atualização… :sweat_smile: