Images non publiées sur Discourse dans 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.

Je regretterais également de ne pas pouvoir publier intégralement.
Je ne suis pas tout à fait certain de ce que vous suggérez ici…
Comment comptez-vous extraire les images ? Avec une expression régulière ?
Je peux imaginer une expression régulière qui remplacerait les balises d’image par la syntaxe Markdown appropriée. Est-ce ce que vous voulez dire et cela fonctionnerait-il ?

Non. J’aurais été tenté de le faire si je n’avais pas déjà essayé ce genre de chose par le passé. Cet article de Stack Overflow explique en partie le problème : https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454.

Je vais examiner la difficulté qu’il y aurait pour le plugin à assembler une version HTML basique du contenu du message. La dernière solution consisterait à utiliser les méthodes DOMDocument pour analyser le contenu. Les commentaires renvoyés par Discourse sont analysés avec ces méthodes et je n’ai reçu aucun rapport de problème à ce sujet.

Je pense que publier un extrait et permettre aux utilisateurs de consulter le message complet en cliquant sur le bouton « Afficher le message complet » sur Discourse est probablement la meilleure solution, mais je suis réticent à supprimer l’option « Publier le message complet » du plugin WP Discourse.

Merci pour l’explication.
Je demanderai à mes auteurs de simplement publier l’article et de cliquer sur « Mettre à jour », car publier puis mettre à jour l’article sur WP semble toujours résoudre le problème des images sur Discourse.

Je préfère que mes auteurs passent une seconde de plus sur chaque article plutôt que de voir l’option de publication complète disparaître :wink:

Si vous avez activé le paramètre du site Discourse « télécharger les images distantes localement », l’image ne disparaît-elle pas à nouveau quelques minutes après la mise à jour du message ? Si ce n’est pas le cas, je vais examiner pourquoi cela résout le problème.

J’ai bien ce paramètre activé et les images s’affichent toujours correctement sur tous mes derniers articles, même après plusieurs jours ou semaines. Voici un exemple avec un article vieux d’un mois dans lequel j’ai rencontré le problème d’affichage des images.

De plus, j’ai vérifié les URLs des images côté Discourse et les liens correspondent bien à ceux de WordPress, ce qui signifie que les images ne sont pas téléchargées sur Discourse. Est-ce dû au fait que le site et le forum partagent le même domaine ?
(site : https://monocycle.info, forum : https://forum.monocycle.info)

J’obtiens toujours une vignette cassée géante au lieu de l’image lorsque je mets à jour le fil Discourse. Lorsque j’édite le message, je vois ce qui suit dans < > :

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=""/

Votre site WordPress utilise-t-il le http ou le https ?

C’est actuellement http, bien que j’étudie la possibilité de passer à https.

Les navigateurs ne chargeront pas le contenu provenant de sources non sécurisées si la page est en HTTPS.

Si vous vous fiez à un élément HTML pour charger l’image, cela ne fonctionnera pas tant que votre site principal n’utilisera pas HTTPS.

Je viens de publier la version 2.0.2 de WP Discourse sur le référentiel des plugins WordPress. Cette mise à jour devrait résoudre le problème des images brisées qui se produisait lors de la publication d’articles sur Discourse avec l’éditeur par blocs.

Les images, les galeries d’images, ainsi que les vidéos YouTube et Vimeo sont désormais extraites des articles et formatées de manière à ce que Discourse puisse les traiter. N’hésitez pas à me faire part de tout problème rencontré avec cette mise à jour. Si certains blocs WordPress ne s’affichent toujours pas correctement sur Discourse, faites-le-moi savoir : les blocs peuvent désormais être analysés par nom, ce qui devrait permettre de résoudre tout problème.

La semaine prochaine, j’ajouterai un filtre auquel vous pourrez vous connecter pour analyser les blocs trop obscurs pour être gérés par le plugin.

Quelques problèmes ici après la mise à jour.

Sur WP, j’utilise l’« éditeur classique » (TinyMCE).

J’avais d’anciens articles avec des URL de vidéos dans des shortcodes [video], et mes articles les plus récents (moins de 3 ans) utilisaient le plugin d’intégration vidéo ARVE, qui place l’URL de la vidéo dans un shortcode [arve].
J’ai donc filtré les publications de WP vers Discourse avec ceci :

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

Cela fonctionnait parfaitement et seules les URL des vidéos étaient transmises à Discourse, de sorte qu’elles s’affichaient intégrées sur Discourse.

Mais depuis la mise à jour de WP-Discourse, les vidéos ne s’affichent plus sur Discourse.
J’ai aussi essayé de coller simplement l’URL YouTube dans TinyMCE, sans shortcode (j’ai appris qu’aucun shortcode n’est requis pour que WP intègre une vidéo YouTube d’une manière ou d’une autre… Ou peut-être est-ce à cause de l’un de mes autres plugins ou de mon thème ? :thinking: Mais je pense que cela n’a pas d’importance), et de supprimer mes fonctions preg_replace, mais la vidéo ne s’affiche toujours pas sur Discourse.

Voici mon texte sur WP (texte brut, pas l’onglet WYSIWYG) :

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

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

Voici comment cela apparaît sur WP :

Publication sur Discourse :

Code HTML de la publication Discourse :

<p>Test vidéooo:</p>
<div data-mode="normal" data-provider="youtube">
<div></div>
</div>
<div data-mode="normal" data-provider="youtube">
<div></div>
</div>

edit : aussi, j’ai remarqué que lorsque l’article est privé sur WP, il ne se synchronise pas sur Discourse lorsque nous modifions l’article. C’est un peu embêtant quand on veut faire des tests en privé.

C’est étrange. Mon espoir avec ce changement était qu’il n’affecte pas les messages publiés avec l’éditeur classique. Je vais essayer de reproduire le problème. Pouvez-vous partager le code source que vous voyez si vous ouvrez le message dans l’onglet Texte de l’éditeur ?

Avec le plugin WP ARVE

<p>Test vidéooo:</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&amp;modestbranding=1&amp;rel=0&amp;autohide=1&amp;playsinline=1&amp;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&amp;modestbranding=1&amp;rel=0&amp;autohide=1&amp;playsinline=1&amp;autoplay=0" width="480" height="270"></iframe></div></div>

Sans le plugin, si j’écris simplement dans WP :

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

L’éditeur Discourse affiche ce résultat :

<p>Test vidéooo:</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>

Il semble que WP utilise toujours une autre bibliothèque non native, peut-être issue de mon thème ? :thinking:
Je suppose que le problème vient plus de mon côté que du vôtre, mais cela fonctionnait bien avant la mise à jour… :sweat_smile: