Imágenes no se publican en Discourse en WP 5.3

Supongo que esto está relacionado con los cambios en los bloques de la actualización 5.3. Puedes ver la publicación aquí: In Conversation with Anna Morgan - Discussions - Nature Photographers Network

Por si acaso, también tengo este fragmento para imágenes de CDN:

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

Yo también estoy recibiendo este error en mi panel de control, y estoy bastante seguro de que proviene del complemento de WordPress.

Encontré esta publicación WP Discourse plug in being odd - #10 by adamprocter, pero estoy en la versión 1.9.7 y el nombre de usuario de publicación es una cuenta activa.

Lo revisaré hoy. Lo que veo en mi sitio es que las imágenes publicadas desde WordPress se muestran correctamente hasta que Discourse intenta descargar la imagen remota. Cuando eso ocurre, termino con un marcado como el que estás recibiendo en la publicación:

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

No estoy seguro si esto está relacionado con los cambios en WordPress 5.3.

Si estás recibiendo la advertencia Detectamos una solicitud de API que utiliza un método de autenticación obsoleto, eso no estará causando el problema que tienes con las imágenes. Las versiones 1.9.6 y superiores de WP Discourse no deberían generar esa advertencia. Todas las solicitudes de API del complemento ahora utilizan autenticación basada en encabezados.

El problema parece ser que cuando el markdown de carga de Discourse está envuelto en etiquetas HTML, el markdown no se está analizando. Por ejemplo, esto es lo que veo en una publicación de WordPress después de ejecutar el trabajo PullHotlinkedImages de Discourse:

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

Editar la publicación para eliminar cualquier etiqueta HTML que rodee el enlace markdown resuelve el problema, pero será necesario encontrar una solución adecuada para esto.

Perdona que moleste, pero ¿estás trabajando en esto, Simon, o ya se ha asignado a alguien?

El problema es que cuando se publican publicaciones con imágenes en Discourse, el HTML de la publicación inicialmente se ve algo así:

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

Si la configuración del sitio download remote images to local está habilitada en Discourse, el enlace de la imagen se romperá cuando Discourse descargue la publicación desde WordPress. El problema ocurrirá cada vez que una etiqueta de imagen con una URL remota esté envuelta en etiquetas HTML.

Las soluciones más sencillas para este problema son deshabilitar la configuración del sitio download remote images to local o no publicar el contenido completo de la publicación desde WordPress a Discourse.

En el futuro, el complemento WP Discourse podría eliminar la opción de publicar publicaciones completas. Pueden ocurrir múltiples problemas al publicar contenido completo de publicaciones desde WordPress a Discourse. La mayoría de estos problemas deberían poder resolverse publicando extractos desde WordPress a Discourse y luego utilizando el botón Mostrar publicación completa para mostrar la publicación completa en Discourse. ¿Esto suena como algo que podría funcionar para tu caso?

Otra solución posible sería personalizar la plantilla utilizada para publicar las publicaciones de WordPress. Las imágenes podrían extraerse de las publicaciones y luego publicarse junto con un extracto de la publicación. Con una plantilla personalizada, el HTML de la imagen podría estructurarse de una manera que no entre en conflicto con el procesador de Markdown de Discourse.

Gracias, Simon. Descargar imágenes remotas a local fue la solución fácil por ahora. Me desalienta saber que la opción de publicar entradas completas podría desaparecer. La forma en que lo uso actualmente es publicar una entrada en WordPress, que luego se publica en la sección de Artículos de Discourse, configurada por defecto en «Observar primer mensaje» para todos. De esta manera, todos reciben un correo electrónico con el contenido completo del artículo, y lo mejor es que pueden simplemente responder al correo para agregar un comentario. Si tienen que dar ese paso adicional de visitar el sitio, es probable que la mayoría no lea el artículo si solo hay un pequeño fragmento, especialmente si no tiene imágenes, algo realmente importante para nuestro sitio. Si desapareciera la opción de publicar entradas completas, podría considerar dejar WordPress y publicar los artículos directamente en Discourse, lo cual no es ideal para el SEO, etc., pero creo que la participación es más importante.

También echaría de menos una publicación completa.
No estoy 100 % seguro de lo que sugieres aquí…
¿Cómo extraerías las imágenes? ¿Con una expresión regular?
Podría imaginarme una expresión regular que reemplace las etiquetas de imagen con la sintaxis adecuada de Markdown. ¿Es eso a lo que te refieres y funcionaría?

No. Me habría sentido tentado a hacerlo si no hubiera probado ese tipo de cosas en el pasado. Esta publicación de Stack Overflow explica en parte el problema: https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454.

Voy a investigar qué tan difícil sería que el plugin genere una versión HTML básica del contenido de la publicación. El último recurso sería utilizar los métodos de DOMDocument para analizar el contenido. Los comentarios que devuelve Discourse se analizan con esos métodos y no he recibido informes de problemas al respecto.

Creo que publicar un extracto y luego permitir que los usuarios vean la publicación completa haciendo clic en el botón “Mostrar publicación completa” en Discourse es probablemente la mejor solución para esto, pero me resisto a eliminar la opción “Publicar publicación completa” del plugin WP Discourse.

Gracias por la explicación.
Pediré a mis autores que simplemente publiquen el artículo y hagan clic en “actualizar”, ya que publicar y luego actualizar el artículo en WP siempre parece solucionar los problemas de imágenes en Discourse.

Prefiero que mis autores dediquen 1 segundo más a cada artículo antes que ver que desaparezca la opción de publicar completamente :wink:

Si tienes habilitada la configuración del sitio de Discourse descargar imágenes remotas a locales, ¿no es cierto que la imagen simplemente desaparece de nuevo unos minutos después de actualizar la publicación? Si no es así, investigaré por qué eso soluciona el problema.

Sí, tengo esta configuración habilitada y las imágenes se siguen mostrando correctamente en todos mis artículos más recientes, incluso después de días y semanas. Un ejemplo es este artículo de hace un mes, en el que encontré el problema con las imágenes.

Además, revisé las URL de las imágenes en Discourse y los enlaces son los mismos que los de WordPress, por lo que las imágenes no se descargan en Discourse. ¿Será porque el sitio web y el foro comparten el mismo dominio?
(sitio: https://monocycle.info, foro: https://forum.monocycle.info)

Sigo obteniendo una miniatura enorme rota en lugar de la imagen cuando actualizo el hilo de Discourse. Al editar la publicación, veo lo siguiente 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=""/

¿Tu sitio de WordPress usa http o https?

Actualmente es http, aunque estoy investigando https.

Los navegadores no cargarán contenido de fuentes inseguras si la página es HTTPS.

Si estás dependiendo de un elemento HTML para cargar la imagen, esto no funcionará hasta que tu sitio principal use HTTPS.

Acabo de publicar WP Discourse versión 2.0.2 en el repositorio de plugins de WordPress. La actualización debería solucionar el problema de las imágenes rotas que ocurría al publicar entradas en Discourse con el editor de bloques.

Las imágenes, las galerías de imágenes, así como los videos de YouTube y Vimeo, ahora se extraen de las entradas y se formatean de manera que Discourse pueda procesarlos. Avísame si encuentras algún problema con la actualización. Si aún hay bloques de WordPress que no se renderizan correctamente en Discourse, házmelo saber: ahora los bloques se pueden analizar por nombre, por lo que debería ser posible resolver cualquier problema.

La próxima semana añadiré un filtro al que se pueda conectar para analizar cualquier bloque demasiado obscuro para ser gestionado por el plugin.

Unos cuantos problemas aquí después de la actualización.

En WP estoy usando el «editor clásico» (TinyMCE).

Tenía artículos antiguos con URLs de vídeo en shortcodes [video] y mis artículos más recientes (de menos de 3 años) usaban el plugin incrustador de vídeo ARVE, que pone la URL del vídeo dentro de un shortcode [arve].
Así que filtré las entradas de WP a Discourse con esto:

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

Funcionaba perfectamente y solo se pasaban las URLs de los vídeos a Discourse, de modo que se mostraban incrustados en Discourse.

Pero desde la actualización de WP-Discourse, los vídeos no se muestran en Discourse.
También probé simplemente pegando la URL de YouTube en TinyMCE, sin shortcode (aprendí que no se requiere ningún shortcode para que WP incruste vídeos de YouTube de alguna manera… O quizás sea por uno de mis otros plugins o por mi tema? :thinking: Pero creo que eso no importa), y eliminando mis funciones preg_replace, pero el vídeo sigue sin mostrarse en Discourse.

Aquí está mi texto en WP (texto plano, no en la pestaña WYSIWYG):

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

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

Así aparece en WP:

Entrada en Discourse:

Código HTML de la entrada en Discourse:

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

edición: también, noté que cuando el artículo es privado en WP, no se sincroniza en Discourse cuando editamos el artículo. Eso es un poco molesto cuando queremos hacer algunas pruebas en privado.

Eso es extraño. Mi esperanza con el cambio era que no afectara a las publicaciones que se publican con el editor Clásico. Intentaré reproducir el problema. ¿Podrías compartir el marcado que ves si abres la publicación en la pestaña Texto del editor?

Con el plugin de 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&#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>

Sin el plugin, si simplemente escribo en WP:

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

El editor de Discourse muestra este resultado:

<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>

Parece que WP sigue utilizando otra biblioteca no nativa, ¿quizás de mi tema? :thinking:
Supongo que el problema está más de mi lado que del tuyo, aunque antes funcionaba bien tras la actualización… :sweat_smile: