Utilizza WP Discourse per pubblicare post da Wordpress a Discourse

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:


Istruzioni

Impostazioni di pubblicazione

:warning: 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.

10 Mi Piace

È possibile importare post del blog pubblicati in precedenza? Ad esempio, post del blog degli ultimi 30 giorni? Solo per popolare un po’ quella categoria. Grazie.

2 Mi Piace

Al momento non è disponibile un’opzione di importazione in blocco. È comunque possibile ottenere questo risultato modificando ciascuno dei post precedenti e pubblicandoli su Discourse.

2 Mi Piace

Sto impostando i miei siti in modo che solo poche persone accedano a WordPress (autori), ma Discourse è praticamente aperto a chiunque. Discourse viene utilizzato per l’autenticazione.

Vorrei che gli argomenti creati dagli articoli mostrassero il nome dell’utente di Discourse invece di “System” (o qualunque cosa io imposti per Publishing Username).

In altre parole, Publishing Username è impostato su “System”. Joe Blow pubblica un nuovo articolo in WordPress. Joe Blow esiste in Discourse (poiché Discourse controlla l’autenticazione, tutti gli utenti di WordPress sono anche utenti di Discourse). Vorrei che l’argomento venisse mostrato come pubblicato da Joe Blow invece che da System. Successivamente, sullo stesso sito, Jane Doe pubblica un articolo, vorrei che l’argomento in Discourse venisse mostrato come pubblicato da Jane Doe invece che da System.

È fattibile?

Non lo so. Ma se controlli la scheda Pubblica e lì l’ultima opzione Pubblicazione chiave API utente singolo — è qualcosa che proverei per prima cosa.

Se stai usando DiscourseSSO (o qualunque sia la connessione che è o era…) allora nessuno può registrarsi al tuo forum senza passare attraverso WordPress. Quindi, se WordPress controlla l’account degli editor su Discourse, come faresti senza richiedere prima la registrazione su WordPress per tutti? Sono curioso perché potrei usare qualcosa del genere.

(E… sono di nuovo fuori tema :man_facepalming:)

Ho utilizzato l’impostazione del client DiscourseConnect. Questo utilizza Discourse come sistema di autenticazione e crea l’utente in WordPress se non esiste. Dalle istruzioni del plugin.

Abilitare il tuo sito a funzionare come client DiscourseConnect consente l’autenticazione dell’utente di WordPress tramite il tuo forum Discourse o il tuo sito WordPress. Se un utente Discourse accede a WordPress tramite un link DiscourseConnect, verrà autenticato in base alle sue credenziali Discourse. Se quell’utente non esiste ancora sul tuo sito WordPress, verrà creato un nuovo utente.

Gli utenti verranno inizialmente impostati come abbonati in WordPress e li imposterò manualmente come autori (se necessario). Ho intenzione di configurare il sito in modo che gli utenti non registrati possano vedere tutti i contenuti e dovranno registrarsi in WP solo se desiderano pubblicare articoli.

Tutti gli utenti in WordPress dovranno prima registrarsi in Discourse, quindi il connettore li accederà automaticamente a WP, o creerà un account e poi li accederà.

Sì, lo fa, ma sovrascrive tutti gli altri modi di autenticazione, e poi un utente normale del forum deve registrarsi su WordPress prima di ottenere l’accesso a Discourse.

O sto fraintendendo qualcosa?

Per quanto ho visto, un utente normale di Discourse non deve mai accedere al sito WP. Se decidono di seguire un link dal sito Discourse, vengono registrati automaticamente sul sito WP.

Sentiti libero di visitare i due siti per vedere di cosa sto parlando. Tieni presente che non sono ancora completi, ma quella parte funziona ora.
Https://forum.oursail.boats è Discourse
Https://www.oursail.boats è il sito WP.

Crea un account sul sito WP. Potrai vedere e rispondere ai messaggi lì.

Quindi vai sul sito WP e seleziona la voce di menu Login. Ignorerà il login WP e ti connetterà invece al login Discourse (a seconda delle tue impostazioni). Se hai selezionato l’opzione per rimanere connesso, non ti verrà nemmeno richiesto. Tornerà immediatamente al sito WP dopo aver effettuato l’accesso.

Devi solo assicurarti che gli utenti che pubblicano gli articoli su Wordpress abbiano il loro Discourse Username compilato nel profilo dell’utente. Se l’utente ha un Discourse Username, i post che crea in Wordpress verranno pubblicati su Discourse utilizzando il suo username.

Puoi aggiornarlo manualmente o aggiornarlo automaticamente utilizzando il webhook Update Userdata (vedi le impostazioni “Webhooks” di WP Discourse).

3 Mi Piace

Prima di modificare manualmente tutti i 393 post pubblicati sul mio WP, volevo solo ricontrollare se è ancora così? Cioè, che non ci sia ancora un’opzione di importazione in blocco? Grazie!

Non c’è un’opzione di importazione in blocco. Tieni presente che se pubblichi 393 post su Discourse, avrai 393 segnaposto di argomenti. Ti consiglio di considerare una strategia più mirata. Di cosa discuterà effettivamente la tua community ora?

2 Mi Piace

La mia ipotesi è che non lo faranno. Discourse viene utilizzato solo per sostituire i commenti, nient’altro. Quindi, non è per Discourse, ma per WordPress.

Ero in una situazione simile. Poiché la maggior parte dei post di WordPress nel mondo non riceve alcun tipo di commento, o sono più o meno solo rumore, il mio non è stato diverso. Ma invece di lavorare con tutti i contenuti, ho utilizzato il mio vecchio WP-content per risvegliare l’attività su Discourse. Non ho collegato tutti i post contemporaneamente, ma a goccia. Come ora ci sono argomenti attivi sul colpo di calore nei cani e quante calorie dovresti mangiare durante un’escursione — vecchi post, che hanno avuto nuova vita su Discourse.

Se ci fosse un’opzione per collegare tutto in blocco, lo farei — senza capire un tale potenziale sprecato. Potrei anche dire che seppellirei l’opzione di massa a sei piedi sotto terra anche se potessi codificarla :wink:

2 Mi Piace

Sto solo cercando di inserire tutti i commenti in Discourse prima di migrare il sito web da WordPress a Ghost, poiché Ghost non gestisce i commenti (anche se puoi collegarlo a Discourse per i commenti).

Ma mi è appena venuto in mente che se prima collego il mio nuovo Ghost al mio Discourse prima di importare tutti i miei post di WordPress, questo potrebbe funzionare… forse (/me va a provare…)

Non migra i commenti da WP a Discourse. Mostra solo i post di Discourse in WordPress.

Se ho capito bene…

1 Mi Piace

Non ha senso collegare post di Wordpress e argomenti di Discourse se stai per migrare a Ghost.

Ciao a tutti!

Ho appena completato la configurazione della mia community con Discourse! Attualmente sto testando il plugin WP Discourse sul mio sito di staging.

Ho una preoccupazione riguardo a potenziali problemi di SEO. Nello specifico, pubblicando lo stesso contenuto da WP a Discourse, sono preoccupato per la duplicazione dei contenuti ai fini SEO. Discourse contrassegna i contenuti nel forum come copia ai fini SEO?

Ciao Victor :slight_smile:

Dovresti stare tranquillo dal punto di vista SEO con le impostazioni predefinite (poiché si tratta di domini diversi), ma puoi anche impostare l’URL canonico dell’argomento Discourse sull’URL del post di Wordpress.

Abilita l’impostazione del sito Discourse embed set canonical url, quindi il permalink del post WP sarà l’URL canonico dell’argomento Discourse (ovvero, apparirà nell’head dell’HTML dell’argomento Discourse come link canonico).

Per maggiori informazioni a riguardo, vedi

1 Mi Piace

Grazie @angus. Lo apprezzo molto. Per me, è più sicuro prendere il controllo con la SEO, che lasciarla al caso!

1 Mi Piace

Sto cercando di impostare categorie diverse per diversi custom_post_types, il codice sottostante seleziona la categoria corretta nell’amministrazione di Wordpress. Tuttavia, quando pubblico su Discourse, la categoria non viene impostata lì (e viene impostata su “non categorizzato” per impostazione predefinita)…

Forse mi sfugge qualcosa di ovvio?

// WP Discourse imposta le categorie del forum CPT per CPTS
 
add_filter( 'wp_discourse_publish_categories', 'radhr_filter_categories_policies', 10, 2 );
function radhr_filter_categories( $categories, $post ) {
	if ( 'policy' === get_post_type( $post ) ) {
		$output = [];
		foreach ( $categories as $category ) {
			if ( 'Policies' === $category['name']) {
				$output[] = $category;
			}
		}
		return $output;
	} 
	
	elseif ( 'guide' === get_post_type( $post ) ) {
		$output = [];
		foreach ( $categories as $category ) {
			if ( 'Guides' === $category['name']) {
				$output[] = $category;
			}
		}
		return $output;
	}
	
	elseif ( 'post' === get_post_type( $post ) ) {
		$output = [];
		foreach ( $categories as $category ) {
			if ( 'Blogs' === $category['name']) {
				$output[] = $category;
			}
		}
		return $output;
	}

	return $categories;
}

Hai fatto un’ipotesi ragionevole su come raggiungere il tuo obiettivo, ma wp_discourse_publish_categories non funzionerà in modo affidabile se stai filtrando per una sola categoria con l’editor di Gutenberg.

Dovresti usare wpdc_publish_post_category invece:

Aggiornerò l’OP per annotarlo.

1 Mi Piace