Immagini non pubblicate su Discourse in WP 5.3

Immagino che questo sia correlato alle modifiche apportate ai blocchi nell’aggiornamento 5.3. Puoi vedere il post qui: In Conversation with Anna Morgan - Discussions - Nature Photographers Network

Per tua informazione, ho anche questo frammento per le immagini CDN:

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

Anche io sto riscontrando questo errore nella mia dashboard, di cui sono quasi certo che sia causato dal plugin di WordPress.

Ho trovato questo post WP Discourse plug in being odd - #10 by adamprocter, ma io sono sulla versione 1.9.7 e l’utente di pubblicazione è un account attivo.

Ci lavorerò sopra oggi. Ciò che vedo sul mio sito è che le immagini pubblicate da WordPress vengono visualizzate correttamente finché Discourse non tenta di scaricare l’immagine remota. Quando ciò avviene, mi ritrovo con un markup come quello che stai ricevendo nel post:

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

Non sono sicuro se sia correlato ai cambiamenti introdotti in WordPress 5.3.

Se ricevi l’avviso “We detected an API request using a deprecated authentication method”, questo non sarà la causa del problema che stai riscontrando con le immagini. Le versioni di WP Discourse 1.9.6 e successive non dovrebbero generare tale avviso. Tutte le richieste API dal plugin utilizzano ora l’autenticazione basata sugli header.

Il problema sembra essere che quando il markdown caricato da Discourse è racchiuso in tag HTML, il markdown non viene analizzato correttamente. Ad esempio, questo è ciò che vedo per un post di WordPress dopo l’esecuzione del job Discourse PullHotlinkedImages:

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

Modificare il post per rimuovere eventuali tag HTML che circondano il link markdown risolve il problema, ma sarà necessario trovare una soluzione adeguata per questo caso.

Scusa il disturbo, ma ci stai lavorando tu, Simon, o è stato assegnato a qualcun altro?

Il problema è che quando i post con immagini vengono pubblicati su Discourse, l’HTML del post inizialmente appare più o meno così:

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

Se l’impostazione del sito download remote images to local è abilitata su Discourse, il link dell’immagine si interromperà quando Discourse scarica il post da WordPress. Il problema si verificherà ogni volta che un tag immagine con un URL remoto è avvolto da tag HTML.

Le soluzioni più semplici per questo problema sono disabilitare l’impostazione del sito download remote images to local oppure non pubblicare l’intero contenuto del post da WordPress a Discourse.

In futuro, il plugin WP Discourse potrebbe rimuovere l’opzione per pubblicare post completi. Ci sono diversi problemi che possono verificarsi quando si pubblica l’intero contenuto di un post da WordPress a Discourse. La maggior parte di questi problemi dovrebbe poter essere risolta pubblicando estratti da WordPress a Discourse e utilizzando poi il pulsante Mostra post completo per visualizzare il post intero su Discourse. Pensi che questa possa essere una soluzione adatta al tuo caso?

Un’altra possibile soluzione sarebbe personalizzare il modello utilizzato per pubblicare i post di WordPress. Le immagini potrebbero essere estratte dai post e poi pubblicate insieme a un estratto del post. Con un modello personalizzato, l’HTML delle immagini potrebbe essere strutturato in modo da non entrare in conflitto con il processore markdown di Discourse.

Grazie Simon, scarica le immagini remote in locale è stata la soluzione più semplice per il momento. Sono scoraggiato nel sentire che la pubblicazione degli articoli completi potrebbe essere rimossa. Attualmente lo uso pubblicando un post su WordPress, che viene poi pubblicato nella sezione Articoli su Discourse, impostata di default su “Osserva il primo post” per tutti. In questo modo tutti ricevono un’email con il contenuto completo dell’articolo, e la cosa migliore è che possono rispondere direttamente all’email per aggiungere un commento. Se dovessero compiere l’ulteriore passo di visitare il sito, è probabile che la maggior parte non legga l’articolo se c’è solo un piccolo estratto, specialmente se non contiene immagini, che sono davvero importanti per il nostro sito. Se la pubblicazione degli articoli completi venisse rimossa, potrei valutare di abbandonare WordPress e pubblicare gli articoli direttamente su Discourse, il che non è ideale per la SEO, ecc., ma credo che il coinvolgimento sia più importante.

Mi mancherebbe anche una pubblicazione completa.
Non sono sicuro al 100% di cosa stai suggerendo qui…
Come estrarresti le immagini? Con una regex?
Potrei immaginare una regex che sostituisce i tag delle immagini con la sintassi Markdown corretta. È questo che intendi e funzionerebbe?

No. Sarei stato tentato di farlo se non avessi già provato quel tipo di approccio in passato. Questo post su Stack Overflow spiega in parte il problema: https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454.

Valuterò quanto sia difficile far sì che il plugin assembli una versione HTML di base del contenuto del post. Come ultima risorsa, si potrebbero utilizzare i metodi di DOMDocument per analizzare il contenuto. I commenti restituiti da Discourse vengono analizzati con questi metodi e non ho ricevuto segnalazioni di problemi relativi a tale approccio.

Penso che pubblicare un estratto e poi permettere agli utenti di visualizzare l’intero post cliccando sul pulsante “Mostra post completo” su Discourse sia probabilmente la soluzione migliore per questo caso, ma sono riluttante a rimuovere l’opzione “Pubblica post completo” dal plugin WP Discourse.

Grazie per la spiegazione.
Chiederò ai miei autori di pubblicare semplicemente l’articolo e cliccare su “aggiorna”, dato che pubblicare e poi aggiornare l’articolo su WP sembra sempre risolvere il problema delle immagini su Discourse.

Preferisco che i miei autori impieghino un secondo in più su ogni articolo piuttosto che vedere scomparire l’opzione di pubblicazione completa :wink:

Se hai abilitato l’impostazione del sito Discourse “scarica le immagini remote in locale”, l’immagine non scompare di nuovo pochi minuti dopo l’aggiornamento del post? Se non è così, darò un’occhiata per capire perché questo risolve il problema.

Ho questa impostazione abilitata e le immagini vengono visualizzate correttamente in tutti i miei articoli più recenti, anche dopo giorni e settimane. Ecco un esempio con un articolo di un mese fa in cui ho riscontrato il problema con le immagini.

Inoltre, ho controllato gli URL delle immagini lato Discourse e i link sono quelli di WordPress, quindi le immagini non vengono scaricate su Discourse. Dipende dal fatto che il sito e il forum condividono lo stesso dominio?
(sito: https://monocycle.info, forum: https://forum.monocycle/info)

Quando aggiorno il thread di Discourse, continuo a vedere una miniatura rotta di grandi dimensioni invece dell’immagine. Quando modifico il post, vedo quanto segue tra < >:

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

Il tuo sito WordPress è http o https?

Al momento è http, anche se sto valutando l’opzione https.

I browser non caricheranno contenuti da fonti non sicure se la pagina è in https.

Se ti affidi a un elemento HTML per caricare l’immagine, questo non funzionerà finché il tuo sito principale non utilizzerà https.

Ho appena pubblicato WP Discourse versione 2.0.2 nel repository dei plugin di WordPress. L’aggiornamento dovrebbe risolvere il problema delle immagini interrotte che si verificava quando gli articoli venivano pubblicati su Discourse con l’editor a blocchi.

Immagini, gallerie fotografiche, nonché video di YouTube e Vimeo vengono ora estratti dagli articoli e formattati in modo che Discourse possa gestirli. Fate sapere se riscontrate problemi con l’aggiornamento. Se ci sono ancora blocchi di WordPress che non vengono visualizzati correttamente su Discourse, fatemelo sapere: ora i blocchi possono essere analizzati per nome, quindi dovrebbe essere possibile risolvere eventuali problemi.

La prossima settimana aggiungerò un filtro a cui è possibile agganciarsi per analizzare eventuali blocchi troppo oscuri da gestire con il plugin.

Ci sono alcuni problemi qui dopo l’aggiornamento.

Su WP sto utilizzando l’“editor classico” (tinymce).

Avevo vecchi articoli con URL video negli shortcode [video] e i miei articoli più recenti (meno di 3 anni) utilizzavano il plugin ARVE video embedder, che inserisce l’URL del video all’interno di uno shortcode [arve].
Quindi ho filtrato i post da WP a Discourse in questo modo:

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

Funzionava perfettamente e solo gli URL video venivano inviati a Discourse, così venivano visualizzati incorporati su Discourse.

Ma dall’aggiornamento di WP-Discourse, i video non vengono più visualizzati su Discourse.
Ho anche provato a incollare semplicemente l’URL di YouTube in tinymce, senza shortcode (ho scoperto che non è necessario alcun shortcode affinché WP incorpori un video YouTube in qualche modo… O forse è dovuto a uno degli altri plugin o al mio tema? :thinking: Ma penso che non importi), e rimuovendo le mie funzioni preg_replace, ma il video continua a non apparire su Discourse.

Ecco il mio testo su WP (testo semplice, non scheda WYSIWYG):

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

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

Così appare su WP:

Post su Discourse:

Codice HTML del post su Discourse:

<p>Test video:</p>
<div data-mode="normal" data-provider="youtube">
<div></div>
</div>
<div data-mode="normal" data-provider="youtube">
<div></div>
</div>

Modifica: inoltre, ho notato che quando l’articolo è privato su WP, non viene sincronizzato su Discourse quando modifichiamo l’articolo. È un po’ fastidioso quando vogliamo fare dei test in privato.

È strano. La mia speranza con la modifica era che non influenzasse i post pubblicati con l’editor classico. Proverò a riprodurre il problema. Puoi condividere il markup che vedi se apri il post nella scheda Testo dell’editor?

Con il 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&#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>

Senza il plugin, se scrivo semplicemente in WP:

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

L’editor di Discourse mostra questo risultato:

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

Sembra che WP stia ancora utilizzando un’altra libreria non nativa, forse dal mio tema? :thinking:
Immagino che il problema sia più dalla mia parte che dalla tua, eppure funzionava bene prima dell’aggiornamento… :sweat_smile: