Images non publiées sur Discourse dans WP 5.3

Je suppose que cela est lié aux modifications apportées aux blocs dans la mise à jour 5.3. Vous pouvez consulter le message ici : In Conversation with Anna Morgan - Discussions - Nature Photographers Network

Pour information, j’ai également ce snippet pour les images CDN :

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

Je rencontre également cette erreur dans mon tableau de bord, et je suis presque certain qu’elle provient du plugin WordPress.

Je suis tombé sur ce sujet : WP Discourse plug in being odd - #10 by adamprocter, mais je suis sur la version 1.9.7 et le nom d’utilisateur de publication est un compte actif.

Je vais examiner cela aujourd’hui. Ce que je constate sur mon site, c’est que les images publiées depuis WordPress s’affichent correctement jusqu’à ce que Discourse tente de télécharger l’image distante. Une fois cette opération effectuée, je me retrouve avec un balisage comme celui que vous obtenez dans votre publication :

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

Je ne sais pas si cela est lié aux changements apportés dans WordPress 5.3.

Si vous recevez l’avertissement « We detected an API request using a deprecated authentication method », cela ne sera pas à l’origine du problème que vous rencontrez avec les images. Les versions 1.9.6 et ultérieures de WP Discourse ne devraient pas générer cet avertissement. Toutes les requêtes API émises par le plugin utilisent désormais une authentification basée sur les en-têtes.

Le problème semble être que lorsque le markdown de téléchargement Discourse est enveloppé dans des balises HTML, le markdown n’est pas analysé. Par exemple, voici ce que je vois pour un article WordPress après l’exécution de la tâche Discourse PullHotlinkedImages :

<small>Publié à l'origine sur :			https://scossar.com/figure-tags-cause-issues/
		</small><br>
<figure class="wp-block-image">![](upload://3hPHOMnM5v5srjlz5QWGmVxY4AL.jpeg)</figure>

Modifier l’article pour supprimer toutes les balises HTML entourant le lien markdown résout le problème, mais une solution appropriée devra être trouvée pour cela.

Désolé de te déranger, mais tu travailles là-dessus, Simon, ou quelqu’un a-t-il été assigné à cette tâche ?

Le problème est que lorsque des publications contenant des images sont publiées sur Discourse, le HTML de la publication ressemble initialement à ceci :

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

Si le paramètre du site download remote images to local est activé sur Discourse, le lien de l’image sera rompu lorsque Discourse téléchargera la publication depuis WordPress. Ce problème se produira à chaque fois qu’une balise image avec une URL distante est entourée de balises HTML.

Les solutions les plus simples pour ce problème consistent soit à désactiver le paramètre du site download remote images to local, soit à ne pas publier le contenu intégral des publications de WordPress vers Discourse.

À l’avenir, le plugin WP Discourse pourrait supprimer l’option de publier des publications complètes. De nombreux problèmes peuvent survenir lors de la publication du contenu intégral des publications de WordPress vers Discourse. La plupart de ces problèmes devraient pouvoir être résolus en publiant des extraits de WordPress vers Discourse, puis en utilisant le bouton Afficher la publication complète pour afficher le contenu intégral sur Discourse. Cela semble-t-il être une solution adaptée à votre cas ?

Une autre solution possible consisterait à personnaliser le modèle utilisé pour publier les publications WordPress. Les images pourraient être extraites des publications, puis publiées avec un extrait de la publication. Avec un modèle personnalisé, le HTML des images pourrait être structuré d’une manière qui ne crée pas de conflit avec le processeur Markdown de Discourse.

Merci Simon, télécharger les images distantes localement était la solution la plus simple pour l’instant. Je suis découragé d’apprendre que la publication d’articles complets pourrait disparaître. Voici comment je l’utilise actuellement : je publie un article sur WordPress, qui est ensuite publié dans la section Articles de Discourse, configurée par défaut pour « Suivre le premier message » pour tous. Ainsi, tout le monde reçoit un email contenant le contenu intégral de l’article, et le meilleur, c’est qu’ils peuvent simplement répondre à l’email pour ajouter un commentaire. S’ils doivent faire l’effort supplémentaire de visiter le site, il est probable que la plupart ne liront pas l’article s’il n’y a qu’un petit extrait, surtout s’il ne contient pas d’images, ce qui est vraiment important pour notre site. Si la publication d’articles complets disparaissait, je pourrais envisager de quitter WordPress et de publier les articles directement dans Discourse, ce qui n’est pas idéal pour le référencement, etc., mais je pense que l’engagement est plus 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: