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

Estou achando que isso está relacionado às alterações nos blocos da atualização 5.3. Você pode ver a postagem aqui: In Conversation with Anna Morgan - Discussions - Nature Photographers Network

Apenas para informação, também tenho este trecho para imagens do CDN:

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

Estou recebendo também esse erro no meu painel, que tenho quase certeza ser causado pelo plugin do WordPress.

Encontrei esta postagem WP Discourse plug in being odd - #10 by adamprocter, mas estou na versão 1.9.7 e o usuário de publicação é uma conta ativa.

Vou investigar isso hoje. O que estou observando no meu site é que as imagens publicadas a partir do WordPress são exibidas corretamente até que o Discourse tente baixar a imagem remota. Quando isso acontece, acabo com uma marcação como a que você está recebendo na postagem:

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

Não tenho certeza se isso está relacionado a alterações no WordPress 5.3.

Se você estiver recebendo o aviso Detectamos uma solicitação de API usando um método de autenticação obsoleto, isso não será a causa do problema que você está tendo com as imagens. As versões do WP Discourse 1.9.6 e superiores não devem causar esse aviso. Todas as solicitações de API feitas pelo plugin agora usam autenticação baseada em cabeçalhos.

O problema parece ser que, quando o markdown de upload do Discourse está envolvido em tags HTML, o markdown não está sendo analisado. Por exemplo, é isso que estou vendo em uma postagem do WordPress após a execução do Job PullHotlinkedImages do Discourse:

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

Editar a postagem para remover quaisquer tags HTML que estejam envolvendo o link markdown resolve o problema, mas será necessário encontrar uma solução adequada para isso.

Desculpe incomodar, mas você está trabalhando nisso, Simon, ou alguém já foi designado para isso?

O problema é que, quando posts com imagens são publicados no Discourse, o HTML do post inicialmente se parece com algo assim:

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

Se a configuração do site download remote images to local estiver ativada no Discourse, o link da imagem será quebrado quando o Discourse baixar o post do WordPress. O problema ocorrerá sempre que uma tag de imagem com uma URL remota estiver envolta por tags HTML.

As soluções mais simples para esse problema são desativar a configuração do site download remote images to local ou não publicar o conteúdo completo do post do WordPress no Discourse.

No futuro, o plugin WP Discourse pode remover a opção de publicar posts completos. Vários problemas podem ocorrer ao publicar conteúdo completo de posts do WordPress no Discourse. A maioria desses problemas pode ser resolvida publicando trechos do WordPress no Discourse e, em seguida, usando o botão Mostrar Post Completo para exibir o post inteiro no Discourse. Isso parece algo que poderia funcionar para o seu caso?

Outra solução possível seria personalizar o modelo usado para publicar posts do WordPress. As imagens poderiam ser extraídas dos posts e publicadas junto com um trecho do post. Com um modelo personalizado, o HTML da imagem poderia ser estruturado de forma que não conflite com o processador de Markdown do Discourse.

Obrigado, Simon. Baixar imagens remotas para local foi a solução mais fácil por enquanto. Fico desanimado ao saber que a opção de publicar posts completos pode ser removida. O modo como uso atualmente é publicar um post no WordPress, que então é publicado na seção de Artigos no Discourse, configurado por padrão como ‘Acompanhar primeiro post’ para todos. Dessa forma, todos recebem um e-mail com o conteúdo completo do artigo, e o melhor de tudo é que podem simplesmente responder ao e-mail para adicionar um comentário. Se precisarem dar esse passo extra de visitar o site, é provável que a maioria nem leia o artigo se houver apenas um pequeno trecho, especialmente se não tiver imagens, o que é realmente importante para nosso site. Se a opção de publicar posts completos for removida, posso considerar deixar o WordPress e passar a publicar os artigos diretamente no Discourse, o que não é ideal para SEO, etc., mas acredito que o engajamento é mais importante.

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: