Caso d’uso: Nei miei post di WordPress sono presenti link a YouTube. Desidero che il video di YouTube appaia automaticamente nel rispettivo post di Discourse dopo la pubblicazione del post su WordPress.
Problema: Sembra non funzionare perché, dopo la sincronizzazione, l’HTML del post di Discourse è:
Il video di YouTube verrà visualizzato correttamente solo se rimuovo i tag <p></p>.
Quindi, come posso rimuovere i tag <p></p>? Spero di non dover rimuovere manualmente i tag <p></p> poiché potrei avere migliaia di post.
Non sono sicuro se sia possibile rimuovere i tag <p></p>direttamente nel file functions.php.
Ho seguito il tuo tutorial di personalizzazione. Ecco il codice presente nel file functions.php:
// Aggiunge l'immagine in evidenza al post pubblicato su Discourse.
function my_namespace_publish_format( $input ) {
ob_start();
?>
{excerpt} **<-----posso rimuovere i tag p qui?**
<?php
$output = ob_get_clean();
// Nota: la chiamata a apply_filters() presente nella funzione originale è stata rimossa.
return $output;
}
add_filter( 'discourse_publish_format_html', 'my_namespace_publish_format' );
Questo dovrebbe funzionare se i video sono incorporati nel tuo sito WordPress. Potrebbe richiedere qualche prova ed errore per ottenere il formato corretto. Il problema principale che ho riscontrato è che se ci sono spazi iniziali prima del tag iframe di YouTube, Discourse lo interpreterà come codice.
Fammi sapere se questo approccio non funziona sul tuo sito.
Ciò che mi piacerebbe far funzionare sarebbe visualizzare i video di YouTube quando gli utenti fanno clic sul pulsante “Mostra post completo” su Discourse per espandere un post di WordPress. Non sono sicuro che sia possibile, però.
grazie per la risposta. Apprezzo moltissimo il tuo aiuto.
Ma sembra che non funzioni.
L’output era:
<small>Originariamente pubblicato su http://staging.a1.sg/matrix/</small><br><br><iframe title="GCE O-Level
A-Maths: Matrix & its Inverse" width="525" height="394"
src="https://www.youtube.com/embed/alJEZwwtQ3U?feature=oembed" frameborder="0"
allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>.
</iframe><br><p><iframe title="GCE O-Level A-Maths: Matrix & its Inverse" width="525"
height="394" src="https://www.youtube.com/embed/alJEZwwtQ3U?feature=oembed" frameborder="0"
allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>.
</iframe></p>
Ho anche aggiunto un codice extra nel file functions.php dopo aver provato la soluzione proposta sopra, per assicurarmi che il link di YouTube rimanga una stringa.
L’output del tuo primo esempio di codice sembra vicino a quello che mi aspettavo. Penso che il problema sia che devi aggiungere https://www.youtube.com/embed all’impostazione del sito Discourse allowed iframes. Questo consentirà all’iframe presente nel markup del post di essere visualizzato come un player video su Discourse.
Puoi provare a pubblicare un post senza utilizzare il modello personalizzato ora? Potrebbe essere che tutto ciò che serviva fosse aggiungere https://www.youtube.com/embed all’impostazione del sito Discourse allowed iframes.
Quale editor stai usando sul tuo sito WordPress, il vecchio Classic Editor o il nuovo Block Editor? Inoltre, stai pubblicando l’intero post su Discourse o solo un estratto?
Questo potrebbe essere fatto scrivendo uno script semplice per pubblicare post da un file CSV.
Per evitare che il link al tuo dominio WordPress appaia sotto il titolo dell’argomento, deseleziona l’opzione “Add Featured Links” nella pagina delle impostazioni di WP Discourse Publishing. Per rimuovere il link in evidenza dai post già pubblicati, il link può essere nascosto tramite CSS oppure rimosso dal database del tuo sito Discourse. Sarò fuori ufficio per i prossimi giorni, ma mi occuperò di questo per te quando tornerò al lavoro mercoledì.
Se puoi aspettare fino a mercoledì, posso darti una mano con questo. Se hai bisogno di farlo prima, potresti provare a creare un nuovo argomento nella nostra categoria #supporto chiedendo come creare argomenti tramite l’API da un file CSV.