Puoi utilizzare il plugin WP Discourse per pubblicare gli articoli di WordPress sul tuo Discourse, in modo che la tua comunità possa discutere del contenuto di WordPress. Prima di configurare la pubblicazione, devi prima installare il plugin WP Discourse su WordPress e collegarlo al tuo Discourse. Se sei pronto per iniziare, guarda questo breve video o segui le istruzioni riportate di seguito.
Prossimo passaggio
Una volta configurata la pubblicazione, potresti voler consultare i seguenti argomenti:
- Utilizzare Discourse per i commenti di WordPress
- Accedi a Discourse con WordPress (DiscourseConnect)
Istruzioni
Impostazioni di pubblicazione
Assicurati di salvare sempre le impostazioni dopo averle modificate. Clicca sul pulsante «Salva opzioni» in fondo alla pagina.
Le impostazioni dovrebbero essere relativamente intuitive. Se hai difficoltà a comprendere una di esse, rispondi a questo argomento per ulteriori chiarimenti.
Categoria Discourse predefinita
Imposta la categoria predefinita in cui verranno pubblicati i tuoi articoli su Discourse. Questa impostazione può essere sovrascritta per singoli articoli nella schermata di creazione nuovo articolo di WordPress.
Visualizza sottocategorie
Indica se desideri che le sottocategorie del tuo forum siano disponibili come categorie verso cui pubblicare da WordPress. Dovrai salvare questa impostazione prima che le sottocategorie diventino disponibili nel campo di input «Categoria Discourse predefinita».
Forza aggiornamento categoria
Da utilizzare quando hai aggiunto nuove categorie al tuo forum e desideri che siano disponibili sul tuo sito WordPress. Abilitando questa impostazione e salvando la pagina delle opzioni, viene effettuata una singola chiamata API a Discourse per recuperare le categorie di Discourse. Dopo averla abilitata, la prossima volta che tornerai alla scheda «Commenti», troverai l’impostazione disabilitata.
Consenti tag
Abilita questa opzione se desideri aggiungere tag agli argomenti di Discourse creati tramite WordPress.
Pubblica come argomenti non elencati
Farà sì che gli articoli pubblicati da WordPress siano non elencati su Discourse. Se abiliti l’impostazione webhook «Sincronizza dati commenti», gli articoli non elencati diventeranno visibili quando ricevono la prima risposta su Discourse.
Utilizza contenuto completo dell’articolo
Permette di pubblicare articoli WordPress completi, anziché estratti, sul tuo forum Discourse. Per evitare che il pulsante «Mostra articolo completo» appaia sotto il tuo articolo su Discourse, devi deselezionare l’impostazione del sito «Tronca incorporamento» su Discourse (trovabile all’indirizzo tuoforum.com/admin/site_settings/category/posting).
Lunghezza estratto personalizzata
Se non hai selezionato l’impostazione «Utilizza contenuto completo dell’articolo», questa impostazione creerà estratti di quella lunghezza da pubblicare su Discourse. Puoi anche creare manualmente gli estratti quando crei un articolo WordPress aggiungendo l’estratto alla casella meta «Estratto».
Pubblica automaticamente
Questa opzione seleziona automaticamente la casella di controllo «Pubblica su Discourse» che appare nella schermata di creazione nuovo articolo per i tipi di articolo che devono essere pubblicati su Discourse. La casella di controllo può comunque essere deselezionata durante la creazione dell’articolo.
Traccia automaticamente gli argomenti pubblicati
Questa impostazione è abilitata per impostazione predefinita. Quando è abilitata, l’autore di un articolo pubblicato su Discourse da WordPress verrà automaticamente impostato su «Osservante» dell’argomento (riceverà le notifiche di Discourse per ogni nuova risposta).
Tipi di articolo da pubblicare
Questa impostazione deve essere configurata. Il valore predefinito è «post», ma possono essere selezionati anche pagine e tipi di articolo personalizzati.
Escludi articoli per tag
Se aggiungi tag di WordPress a questa impostazione, qualsiasi articolo WordPress con uno di questi tag non verrà pubblicato su Discourse.
Non visualizzare il campo nome Discourse
Questo nasconderà il campo «Nome utente Discourse» nei profili degli utenti. Il nome utente Discourse viene utilizzato per impostare l’autore dell’argomento quando si pubblicano articoli su Discourse.
Nome utente Discourse modificabile
Questa impostazione determina se gli utenti non amministratori possono modificare il proprio nome utente Discourse nel proprio profilo. Il nome utente Discourse viene utilizzato per impostare l’autore dell’argomento quando si pubblicano articoli su Discourse.
Flag di pubblicazione diretta nel database
Questa impostazione è utilizzata in alcune configurazioni con ambienti WordPress specializzati. Non utilizzare questa impostazione a meno che tu non sappia cosa fa.
Log di pubblicazione dettagliati
Abilitando questa impostazione, tutti gli articoli pubblicati su Discourse verranno registrati nei log di WP Discourse, anche se hanno avuto successo. Normalmente vengono registrati solo gli errori.
Abilita la pubblicazione tramite XML-RPC
XML-RPC è una chiamata a procedura remota spesso utilizzata dai software di blogging per inviare articoli a WordPress. Le applicazioni che utilizzano questa procedura includono l’applicazione di blogging di wordpress.com.
Per impostazione predefinita, WP Discourse non pubblicherà su Discourse gli articoli creati tramite XML-RPC. Il motivo è che non esiste un modo efficace per indicare se un articolo pubblicato tramite software di blogging debba essere pubblicato su Discourse.
Se desideri utilizzare software di blogging per creare articoli che vengono pubblicati direttamente su Discourse, devi aggiungere del codice al file functions.php del tuo tema che si colleghi al filtro wp_discourse_before_xmlrpc_publish. Il filtro wp_discourse_before_xmlrpc_publish passa due argomenti alle funzioni che vi si collegano. Il primo argomento, $publish_to_discourse, è un valore booleano impostato su false per disabilitare la pubblicazione tramite XML-RPC. Il secondo argomento è l’oggetto post.
Per far sì che tutti gli articoli XML-RPC vengano pubblicati automaticamente da Discourse, devi scrivere una funzione che restituisca sempre true. Utilizza un codice simile al seguente:
Attenzione: questo farà sì che tutti gli articoli pubblicati tramite XML-RPC vengano pubblicati su Discourse, inclusi gli articoli vecchi modificati sul software di blogging.
add_filter('wp_discourse_before_xmlrpc_publish', 'my_namespace_xmlrpc_publish', 10, 2 );
function my_namespace_xmlrpc_publish( $publish_to_discourse, $post ) {
return true;
}
Filtraggio degli articoli XML-RPC per tag dell’articolo
L’applicazione di blogging di wordpress.com ti consente di aggiungere tag agli articoli. I tag possono essere utilizzati per controllare se un articolo deve essere pubblicato su Discourse. Per pubblicare solo gli articoli che hanno il tag «discourse», utilizza un codice simile a questo:
add_filter('wp_discourse_before_xmlrpc_publish', 'my_namespace_xmlrpc_publish_by_tag', 10, 2 );
function my_namespace_xmlrpc_publish_by_tag( $publish_to_discourse, $post ) {
if ( has_tag( 'discourse', $post ) ) {
return true;
}
return false;
}
Se desideri utilizzare questo metodo ma non vuoi che il tag discourse appaia nei tuoi articoli pubblicati, puoi rimuoverlo con un codice simile a questo:
add_filter( 'term_links-post_tag', 'my_prefix_remove_discourse_tag' );
function my_prefix_remove_discourse_tag( $tags ) {
foreach( $tags as $key => $value ) {
if ( strpos( $value, 'discourse' ) ) {
unset( $tags[ $key ] );
}
}
return $tags;
}
Filtraggio degli articoli XML-RPC per data dell’articolo
Per consentire la pubblicazione su Discourse tramite XML-RPC solo degli articoli pubblicati dopo una certa data, aggiungi del codice simile a questo al tuo file functions.php. Questo codice consentirà la pubblicazione su Discourse di tutti gli articoli pubblicati dopo il 1° gennaio 2016.
add_filter('wp_discourse_before_xmlrpc_publish', 'my_namespace_xmlrpc_publish_by_date', 10, 2 );
function my_namespace_xmlrpc_publish_by_date( $publish_to_discourse, $post ) {
if ( strtotime( $post->post_date ) > strtotime( '2016-01-01') ) {
return true;
}
return false;
}
Da fare: aggiungere un filtro al plugin wp-discourse per consentire la pubblicazione solo di nuovi articoli (anziché articoli modificati) tramite XML-RPC.
Filtraggio delle categorie disponibili per un tipo di articolo personalizzato
Prima che le categorie di Discourse vengano visualizzate nella casella meta «Pubblica su Discourse» sulla pagina admin/post-new di WordPress, viene applicato il filtro WordPress 'wp_discourse_publish_categories'. Vengono passati come argomenti l’array delle categorie di Discourse e l’articolo corrente. Questo può essere utilizzato nel file functions.php del tuo tema per limitare quali categorie sono disponibili per un determinato tipo di articolo.
Ecco un esempio che crea un tipo di articolo 'acme_product' e restituisce le categorie di Discourse «fun» e «scratch» da visualizzare nella casella meta «Pubblica su Discourse» per gli articoli di quel tipo.
// Crea il tipo di articolo.
add_action( 'init', 'my_namespace_create_post_type' );
function my_namespace_create_post_type() {
register_post_type( 'acme_product',
array(
'labels' => array(
'name' => __( 'Prodotti' ),
'singular_name' => __( 'Prodotto' )
),
'public' => true,
'supports' => array( 'title', 'editor', 'comments', 'custom-fields' ),
'has_archive' => true,
'show_in_rest' => true,
)
);
}
// Filtra le categorie disponibili per il tipo di articolo 'acme_product'.
add_filter( 'wp_discourse_publish_categories', 'my_namespace_filter_categories', 10, 2 );
function my_namespace_filter_categories( $categories, $post ) {
if ( 'acme_product' === get_post_type( $post ) ) {
$output = [];
foreach ( $categories as $category ) {
if ( 'fun' === $category['name'] || 'scratch' === $category['name'] ) {
$output[] = $category;
}
}
return $output;
}
return $categories;
}
Se desideri applicare rigorosamente una categoria specifica a tipi di articolo specifici (cioè 1:1), dovresti utilizzare wpdc_publish_post_category invece.
function wpdc_change_post_category( $category, $post_id ) {
if ( 'acme_product' === get_post_type( $post ) ) {
$categories = WPDiscourse\Utilities\Utilities::get_discourse_categories();
$fun_category = array_search( 'fun' , array_column( $categories, 'name' ));
return $fun_category;
} else {
return $category;
}
}
add_filter( 'wpdc_publish_post_category', 'wpdc_change_post_category' );
Visualizzazione dei metadati di un argomento Discourse collegato
Quando hai configurato la pubblicazione, puoi visualizzare i metadati dell’argomento Discourse utilizzando la personalizzazione del modello.
Per prima cosa, devi decidere quale modello modificare. Se, ad esempio, desideri mostrare solo i metadati dell’argomento e nessuna risposta come commenti, dovrai modificare il modello no_replies.
Una volta scelto un modello, puoi modificarlo per aggiungere i metadati dell’argomento Discourse. Ecco un frammento di codice che lo fa, con alcuni commenti che spiegano cosa sta facendo il codice:
// Assicurati che wp-discourse sia presente utilizzando il metodo preferito,
// ad es. https://wordpress.stackexchange.com/questions/127818/how-to-make-a-plugin-require-another-plugin
// Richiedi le utility del plugin dal plugin wp-discourse
require_once ABSPATH . 'wp-content/plugins/wp-discourse/lib/plugin-utilities.php';
use WPDiscourse\Shared\PluginUtilities;
// Incapsula il tuo modello di metadati dell'argomento in una classe in modo da poter includere facilmente le utility del plugin
class DiscourseTopicMetadata {
// Includi le utility del plugin WordPress nella tua classe
use PluginUtilities;
public function __construct() {
// Aggiungi il filtro del modello all'inizializzazione della classe
add_filter( 'discourse_no_replies_html', array( $this, 'topic_metadata_html' ) );
}
function topic_metadata_html( $input ) {
// Ottieni il permalink di Discourse dai metadati dell'articolo
$discourse_permalink = get_post_meta( get_the_ID(), 'discourse_permalink', true );
// Utilizza il permalink di Discourse per ottenere il JSON dell'argomento da Discourse, utilizzando il metodo helper delle utility del plugin che gestisce l'autorizzazione per te
$topic = $this->get_discourse_topic($discourse_permalink);
// Esegui l'output del tuo markup, inclusi i metadati dell'argomento che desideri visualizzare
ob_start();
?>
<div id="discourse-topic-meta">
<div class="views">
Visualizzazioni
<?php echo $topic->views; ?>
</div>
<div class="replies">
Risposte
<?php echo $topic->reply_count; ?>
</div>
</div>
<?php
return ob_get_clean();
}
}
// Istanzia la classe per aggiungere il filtro
new DiscourseTopicMetadata();
Per ulteriori dettagli sui metadati dell’argomento disponibili nella risposta da get_discourse_topic, consulta Discourse API Docs.

