Il existe un cas où les images publiées sur Discourse via les plugins WP Discourse et RSS peuvent être brisées. Cela peut se produire lorsque le contenu complet d’un article est publié sur Discourse avec le plugin WP Discourse et que l’éditeur classique WordPress est utilisé pour publier l’article. Cela peut également se produire avec les articles extraits vers Discourse via le polling RSS lorsque le paramètre d’intégration « Tronquer les articles intégrés » n’est pas activé.
Le problème survient lorsque Discourse tente de télécharger les images ajoutées à l’article. Si le téléchargement de l’image distante aboutit à une balise image Markdown enveloppée dans des balises HTML, l’image sera brisée.
Si les articles sont publiés depuis WordPress, le problème devrait être résolu en passant de l’éditeur classique à l’éditeur par blocs pour publier les articles. Si cela n’est pas possible, ou si cela ne résout pas le problème, une solution de contournement consiste à empêcher Discourse de télécharger les images distantes.
Si vous connaissez les domaines depuis lesquels les images distantes sont publiées, vous pouvez empêcher Discourse de télécharger ces images en ajoutant le(s) domaine(s) au paramètre du site « domaines de téléchargement d’images désactivés » :
Si vous n’êtes pas certain de tous les domaines utilisés, vous pouvez empêcher Discourse de télécharger toutes les images distantes en désactivant « télécharger les images distantes localement ». Notez que la désactivation de ce paramètre peut entraîner des images brisées sur votre site. Si possible, il est préférable de ne prévenir le téléchargement d’images distantes que depuis des domaines spécifiques que vous contrôlez.
Puis-je vous demander plus de détails à ce sujet ? Tous mes sites utilisent l’éditeur classique, mais très peu utilisent un plugin pour rendre le Markdown en entrée (l’espace des plugins pour les analyseurs Markdown s’est asséché, les gens se tournent donc la plupart du temps vers Jetpack).
Est-ce le cas lorsqu’un analyseur Markdown est utilisé au-dessus de l’éditeur classique ?
Le problème se produit lorsque du HTML sous la forme suivante est publié sur Discourse. Il est plus susceptible de survenir lorsqu’un sujet est publié sur Discourse via l’API :
<p><img src="remote-image-domain/..."/></p>
Toutes les balises externes entourant la balise image provoqueront le problème, par exemple <figure><img src="remote-image-domain/..."/></figure>
Lorsque Discourse tente de télécharger l’image distante, le markdown suivant est généré pour le premier exemple :
mais empêcher simplement Discourse de télécharger l’image distante avec le paramètre de site disabled image download domains est un moyen plus simple de le corriger.
Pour les publications publiées depuis WP Discourse avec l’éditeur par blocs, le plugin tente de corriger le problème en traitant la publication avec le code suivant avant de la publier sur Discourse :
Il pourrait être possible de mettre en œuvre une correction similaire pour l’éditeur classique, mais avec l’éditeur classique, la fonction WordPress parse_blocks n’est pas disponible, donc la correction serait plus complexe. J’espère que le problème pourra éventuellement être résolu grâce à des modifications du code central de Discourse.
J’ai également rencontré ce problème avec les images. J’utilise cette méthode pour télécharger les images localement, ce qui a cassé les images comme vous l’avez expliqué ci-dessus. Par la suite, j’ai converti le HTML de WordPress en Markdown et j’ai collé le résultat dans Discourse. Cela fonctionne bien, mais c’est manuel.
Serait-il possible d’intégrer un convertisseur pour automatiser ce processus lors de l’exportation depuis WordPress ?
Si vous utilisez l’éditeur de blocs WordPress pour publier des articles, la conversion devrait se faire automatiquement. Si vous utilisez l’éditeur classique, vous devrez corriger manuellement le HTML sur Discourse pour éviter les images brisées.
Faites-moi savoir si vous utilisez l’éditeur de blocs mais rencontrez toujours des problèmes d’images brisées.
Il serait peut-être possible d’ajouter une fonctionnalité similaire pour les articles publiés avec l’éditeur classique, mais le code nécessaire serait plus complexe que celui utilisé avec l’éditeur de blocs.
J’utilise l’éditeur de blocs (Gutenberg), mais plusieurs plugins tiers y sont installés. Cela pourrait être la cause du problème d’images brisées. J’utilise également certains plugins de galerie tiers sur WordPress.
Le plugin Galerie pourrait être à l’origine du problème. Ce que fait le plugin WP Discourse, avant de définir le contenu de l’article publié sur Discourse, consiste à rechercher tous les blocs dont le blockName est défini sur core/image ou core/gallery. Le code HTML des images contenues dans ces blocs est réécrit sous une forme pouvant être analysée par Discourse.
Il semble possible que les plugins d’images utilisés sur votre site emploient des noms de blocs qui ne sont pas pris en charge. Quel est le nom du plugin Galerie que vous utilisez ?
Je vois… J’utilise cela, mais je viens de réaliser que cela n’est déjà plus pris en charge. Je pense donc que je vais convertir les images vers la galerie par défaut et essayer de mettre à jour les sujets Discourse. C’est probablement le problème, désolé pour cela.
J’ai basculé vers l’éditeur par blocs (ce changement est inévitable car le support de l’éditeur classique prendra fin l’année prochaine), mais cela n’a pas résolu le problème. Les images étaient hébergées sur Facebook.
Pouvez-vous vérifier le balisage des images dans la publication WordPress en sélectionnant « Éditeur de code » dans la barre latérale ? Ce que je me demande, c’est dans quel type de bloc (s’il y en a un) se trouvent les images :
Le plugin WordPress utilise des noms de bloc pour analyser les images. Si l’image ne se trouve pas dans un bloc que le plugin gère actuellement, son balisage ne sera pas nettoyé.
Le post WP était un copier-coller depuis Facebook, voici un exemple du code HTML.
Les images étaient des émojis d’images :
<div dir="auto"><span class="pq6dq46d tbxw36s4 knj5qynh kvgmc6g5 ditlmg2l oygrvhab nvdbi5me sf5mxxl7 gl3lb2sf hhz5lgdu"><img src="https://static.xx.fbcdn.net/images/emoji.php/v9/t34/1/16/1f914.png" alt="🤔" width="16" height="16"></span>Comment ? Vous avez 1 mois pour nous envoyer vos plus beaux poèmes et/ou dessins sur le thème du monocycle, ce qu'il vous évoque, votre passion pour ce sport, etc.</div>
Je n’ai pas la même barre latérale que vous dans l’éditeur de blocs, j’ai donc affiché le contenu HTML du bloc avec cette option :
Si le problème survient parce que ce n’est pas du contenu WP « classique » mais un copier-coller HTML, ce n’est pas un souci. Je dirai à mes utilisateurs d’éviter de copier-coller des images, même des émojis.
Oui, je pense que le problème ici vient du fait que le code HTML a été copié dans la publication WordPress. Le plugin WP Discourse devrait pouvoir gérer les images ajoutées via un bloc image. Il n’est pas configuré pour corriger le HTML des images ajoutées d’une autre manière.
Idéalement, Discourse pourrait gérer les balises HTML d’images encapsulées dans d’autres balises HTML, mais c’est un problème délicat. Il est possible que le plugin WP Discourse puisse être mis à jour pour prendre en charge les images ajoutées en dehors des blocs image. Mon espoir était que la gestion des blocs image couvre la plupart des cas, mais il semble y avoir de nombreuses exceptions à cela.
J’ai lu ce sujet ainsi que l’autre sujet principal traitant des images.
La publication d’un extrait de mon site vers Discourse fonctionne parfaitement. Cependant, lorsque je clique sur le bouton « Afficher le message complet », il semble entrer dans une boucle de chargement et ne charge jamais le message complet (ni ne fait quoi que ce soit d’autre, d’ailleurs).
Si j’essaie de publier le message complet vers Discourse, cela fonctionne également, mais avec quelques particularités :
Les images ne se chargent pas (ce qui m’a permis de trouver ces sujets) ;
Il charge le message complet (j’ai plusieurs boutons/liens dans le contenu de chaque message qui peuvent perturber le plugin), mais il charge également un extrait parfaitement formaté du même message à la fin, pour une raison inconnue. Autrement dit, il charge le message complet (à l’exception des images), puis charge un autre extrait du même message en bas du message.
Une chose à noter : mon site WordPress est en mode staging et n’est pas sécurisé en HTTPS. Mon site Discourse, en revanche, utilise HTTPS. Je pensais que le chargement du message complet pouvait être lié au fait que mon site est en staging, mais d’autres fonctionnalités semblent fonctionner (par exemple, forcer la mise à jour des catégories).
Je comprends qu’il s’agisse d’un problème complexe. Il serait extrêmement difficile pour un plugin de formater les messages d’autres personnes alors que chacun fait des choses différentes, et je pense que l’équipe de Discourse a fait un travail admirable. Je cherche simplement une solution de contournement aussi simple que possible. Peut-être juste un Oneboxing du lien vers le message ? Au moins, le message (ou un lien vers celui-ci) serait présent sur le site Discourse, même s’il n’y aurait aucune coordination en retour.
Merci pour toutes suggestions que vous pourriez avoir.
Le problème pourrait venir du fait que Discourse n’arrive pas à trouver de contenu sur la page WordPress. Je ne m’attendrais pas pour autant à ce que cela provoque une boucle. Discourse devrait simplement échouer silencieusement s’il ne trouve aucun contenu sur la page. Au cas où vous testeriez cela avec un message sans contenu réel, essayez d’en créer un avec du texte concret et voyez si cela fait une différence. Vous pourriez également consulter Comment configurer le paramètre « Allowed embed selectors ». Le paramètre « allowed embed selectors » peut être utilisé pour aider Discourse à trouver le contenu de la page.
Utilisez-vous l’éditeur par blocs (Block Editor) pour publier vos messages WordPress ? Si oui, comment les images sont-elles ajoutées aux messages ? Utilisez-vous un plugin qui ajoute des blocs d’images personnalisés ?
L’extrait de message chargé inclut-il les images du message ?
Je ne m’attendrais pas à ce que l’extrait soit chargé automatiquement ici. Ce à quoi je m’attendrais, c’est à ce que le bouton « Afficher le message complet » soit affiché. Cliquer sur ce bouton devrait charger l’extrait. Lorsqu’un contenu de message complet est publié depuis WordPress vers Discourse, vous pouvez empêcher l’affichage du bouton « Afficher le message complet » en désactivant le paramètre de site Discourse embed truncate.
Cela pourrait être une bonne solution pour vous. Consultez Customize the structure of WP Discourse templates pour plus de détails sur la personnalisation du modèle utilisé pour publier les messages. Il existe un modèle exemple pour publier le message sous forme de onebox ici.
J’ai suivi vos suggestions mais n’ai pas réussi à modifier le résultat, ce qui est probablement davantage dû à mes compétences en matière de Discourse qu’à toute autre chose.
Votre première suggestion était de s’assurer que le message contenait du contenu. Les messages contenaient bien du contenu réel, donc je ne pense pas que ce soit le problème. Vous m’avez également suggéré de configurer le paramètre « How to Configure the allowed embed selectors », ce que j’ai fait, mais je n’ai encore remarqué aucune différence. J’ai gardé ce paramètre très simple et j’ai même inclus les balises
ainsi qu’une autre classe CSS (assez générique), mais lorsque je clique sur « Afficher le message complet », il indique toujours « Chargement ».
J’utilise l’éditeur par blocs. Je n’ai pas de plugins d’image spécifiques, mais j’utilise Genesis Blocks. Cependant, l’image que Discourse essaie d’extraire est l’image à la une du message, ce qui, à ma connaissance, relève de WordPress standard.
Concernant votre question : « L’extrait du message chargé inclut-il les images du message ? » – Non, le message ne contient aucune image. Cependant, si je clique à l’endroit où l’image devrait apparaître, cela me renvoie vers l’article original.
Je vais examiner de plus près l’option Oneboxing. Merci également pour les liens vers ce sujet.
Cela pourrait être la cause du problème avec cette image. Je vais m’en occuper.
Je ne suis pas sûr de ce qui peut se passer dans ce cas. Si votre site Discourse est public, pouvez-vous partager un lien vers un sujet présentant ce problème ? Vous pouvez me l’envoyer par message privé si vous préférez.
Encore merci pour cela. Le site est toujours en phase de test et n’est pas encore public. Est-ce que cela pourrait être le problème ?
Par ailleurs, pour une raison quelconque, la fonction Oneboxing ne fonctionne pas. Si je colle un lien provenant, par exemple, de CNN.com, l’Oneboxing fonctionne parfaitement, mais depuis mon site de test non sécurisé (non https), il se contente de coller le lien. Est-ce dû au fait que le site de test n’est pas sécurisé ?
Le fait que le site Discourse soit privé ne devrait pas poser de problème. Cachez-vous le site WordPress d’une certaine manière ? Si le site WordPress bloque les requêtes provenant de Discourse pour récupérer le contenu complet des messages, cela pourrait causer un problème.
Le site Discourse est public. J’aimerais beaucoup le masquer pendant la phase de développement, mais je n’ai pas réussi à trouver comment le mettre en staging. J’ai un site WP principal qui est en staging/développement, et ce site est privé/masqué.
Je peux forcer une mise à jour de catégorie depuis le plugin WP. J’ai supposé, probablement à tort, que cela signifiait que Discourse pouvait contacter le site principal même si ce dernier était en staging.