Utilisez WP Discourse pour publier des posts de Wordpress vers Discourse

Vous pouvez utiliser le plugin WP Discourse pour publier des articles WordPress sur votre Discourse afin que votre communauté puisse discuter de votre contenu WordPress. Avant de configurer la publication, vous devez d’abord installer le plugin WP Discourse sur WordPress et le connecter à votre Discourse. Si vous êtes prêt à commencer, regardez cette courte vidéo ou suivez les instructions ci-dessous.

Étape suivante

Une fois la publication configurée, vous souhaiterez peut-être consulter les sujets suivants :


Instructions

Paramètres de publication

:warning: Assurez-vous toujours d’enregistrer vos paramètres après les avoir modifiés. Cliquez sur le bouton « Enregistrer les options » en bas de la page.

Les paramètres devraient être relativement explicites. Si vous rencontrez des difficultés pour comprendre l’un d’eux, veuillez répondre à ce sujet pour obtenir des éclaircissements supplémentaires.

Catégorie Discourse par défaut

Définit la catégorie par défaut dans laquelle vos articles seront publiés sur Discourse. Ce paramètre peut être remplacé pour des articles individuels sur l’écran de création d’article WordPress.

Afficher les sous-catégories

Indique si vous souhaitez que les sous-catégories de votre forum soient disponibles en tant que catégories vers lesquelles vous pouvez publier depuis WordPress. Vous devrez enregistrer ce paramètre avant que les sous-catégories ne deviennent disponibles dans le champ de saisie de la catégorie Discourse par défaut.

Forcer la mise à jour de la catégorie

À utiliser lorsque vous avez ajouté de nouvelles catégories à votre forum et que vous souhaitez qu’elles soient disponibles sur votre site WordPress. L’activation de ce paramètre et l’enregistrement de la page d’options effectuent un appel API unique vers Discourse pour récupérer les catégories Discourse. Après l’avoir activé, la prochaine fois que vous reviendrez sur l’onglet Commentaire, vous constaterez que le paramètre est désactivé.

Autoriser les balises

Activez cette option si vous souhaitez ajouter des balises aux sujets Discourse créés via WordPress.

Publier en tant que sujets non répertoriés

Fera en sorte que les articles publiés depuis WordPress soient non répertoriés sur Discourse. Si vous activez le paramètre de webhook « Synchroniser les données des commentaires », les articles non répertoriés deviendront visibles dès qu’ils recevront leur première réponse sur Discourse.

Utiliser le contenu complet de l’article

Permet de publier le contenu complet des articles WordPress, plutôt que des extraits, sur votre forum Discourse. Pour éviter que le bouton « Afficher l’article complet » n’apparaisse sous votre article sur Discourse, vous devez désactiver le paramètre de site « tronquer l’intégration » sur Discourse (trouvé à l’adresse votreforum.com/admin/site_settings/category/posting).

Longueur d’extrait personnalisée

Si vous n’avez pas sélectionné le paramètre « Utiliser le contenu complet de l’article », ce paramètre créera des extraits de cette longueur à publier sur Discourse. Vous pouvez également créer manuellement des extraits lors de la création d’un article WordPress en ajoutant l’extrait à la boîte méta « Extrait ».

Publication automatique

Coche automatiquement la case « Publier sur Discourse » qui apparaît sur l’écran de création d’article pour les types d’articles devant être publiés sur Discourse. La case peut toujours être décochée lors de la création de l’article.

Suivi automatique des sujets publiés

Ce paramètre est activé par défaut. Lorsqu’il est activé, l’auteur d’un article publié sur Discourse depuis WordPress sera automatiquement « en train de surveiller » le sujet (il recevra des notifications Discourse pour chaque nouvelle réponse).

Types d’articles à publier

Ce paramètre doit être défini. Il est défini par défaut sur « article », mais les pages et les types d’articles personnalisés peuvent également être sélectionnés.

Exclure les articles par balise

Si vous ajoutez des balises WordPress à ce paramètre, aucun article WordPress portant l’une de ces balises ne sera publié sur Discourse.

Ne pas afficher le champ Nom Discourse

Cela masquera le champ « Nom d’utilisateur Discourse » dans les profils des utilisateurs. Le nom d’utilisateur Discourse est utilisé pour définir l’auteur du sujet lors de la publication d’articles sur Discourse.

Nom d’utilisateur Discourse modifiable

Cela détermine si les non-administrateurs peuvent modifier leur propre nom d’utilisateur Discourse dans leur profil. Le nom d’utilisateur Discourse est utilisé pour définir l’auteur du sujet lors de la publication d’articles sur Discourse.

Drapeaux de publication directe de la base de données

Ce paramètre est utilisé dans certaines configurations ayant des environnements WordPress spécialisés. N’utilisez pas ce paramètre sauf si vous savez ce qu’il fait.

Journaux de publication verbeux

L’activation de ce paramètre signifie que tous les articles publiés sur Discourse sont enregistrés dans les journaux WP Discourse, même en cas de succès. Normalement, seules les erreurs sont enregistrées.

Activer la publication par XMLRPC

XML-RPC est un appel de procédure à distance souvent utilisé par les logiciels de blog pour envoyer des articles vers WordPress. Les applications utilisant cette procédure incluent l’application de blog de wordpress.com.

Par défaut, WP Discourse ne publiera pas sur Discourse les articles créés via XML-RPC. La raison en est qu’il n’existe pas de bonne méthode pour indiquer si un article publié via un logiciel de blog est destiné à être publié sur Discourse.

Si vous souhaitez utiliser un logiciel de blog pour créer des articles publiés directement sur Discourse, vous devez ajouter du code au fichier functions.php de votre thème qui s’intercale dans le filtre wp_discourse_before_xmlrpc_publish. Le filtre wp_discourse_before_xmlrpc_publish passe deux arguments aux fonctions qui s’y intercalent. Le premier argument, $publish_to_discourse, est un booléen défini sur false pour désactiver la publication par XML-RPC. Le deuxième argument est l’objet post.

Pour que tous les articles XML-RPC soient automatiquement publiés par Discourse, vous devez écrire une fonction qui renvoie toujours true. Utilisez un code similaire à celui-ci :

Avertissement : cela entraînera la publication de tous les articles publiés via XML-RPC sur Discourse, y compris les anciens articles modifiés dans le logiciel de blog.

add_filter('wp_discourse_before_xmlrpc_publish', 'my_namespace_xmlrpc_publish', 10, 2 );
function my_namespace_xmlrpc_publish( $publish_to_discourse, $post ) {
  return true;
}

Filtrage des articles XML-RPC par balise d’article

L’application de blog wordpress.com vous permet d’ajouter des balises aux articles. Les balises peuvent être utilisées pour contrôler si un article est publié ou non sur Discourse. Pour ne publier que les articles ayant une balise « discourse », utilisez un code similaire à celui-ci :

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

Si vous souhaitez utiliser cette méthode mais ne pas voir la balise discourse apparaître dans vos articles publiés, vous pouvez la supprimer avec un code similaire à celui-ci :

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

Filtrage des articles XML-RPC par date d’article

Pour ne permettre la publication sur Discourse via XML-RPC que des articles publiés après une certaine date, ajoutez un code similaire à celui-ci à votre fichier functions.php. Ce code permettra la publication sur Discourse de tous les articles publiés après le 1er janvier 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;
}

À faire : ajouter un filtre au plugin wp-discourse pour permettre la publication uniquement de nouveaux articles (et non d’articles modifiés) via XML-RPC.

Filtrage des catégories disponibles pour un type d’article personnalisé

Avant que les catégories Discourse ne soient affichées dans la boîte méta « Publier sur Discourse » sur la page admin/post-new de WordPress, le filtre WordPress 'wp_discourse_publish_categories' leur est appliqué. Il reçoit en arguments le tableau des catégories Discourse et l’article actuel. Cela peut être utilisé dans le fichier functions.php de votre thème pour limiter les catégories disponibles pour un type d’article donné.

Voici un exemple qui crée un type d’article 'acme_product' puis retourne les catégories Discourse « fun » et « scratch » à afficher dans la boîte méta Publier sur Discourse pour les articles de ce type.

// Créer le type d'article.
add_action(  'init', 'my_namespace_create_post_type' );
function my_namespace_create_post_type() {
  register_post_type( 'acme_product',
    array(
      'labels' => array(
      'name' => __( 'Produits' ),
      'singular_name' => __( 'Produit' )
    ),
    'public' => true,
    'supports' => array( 'title', 'editor', 'comments', 'custom-fields' ),
    'has_archive' => true,
    'show_in_rest' => true,
    )
  );
}

// Filtrer les catégories disponibles pour le type d'article '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;
}

Si vous souhaitez appliquer strictement une catégorie spécifique à des types d’articles spécifiques (c’est-à-dire 1:1), vous devez utiliser wpdc_publish_post_category à la place.

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' );

Afficher les métadonnées d’un sujet Discourse connecté

Lorsque vous avez configuré la publication, vous pouvez afficher des métadonnées sur le sujet Discourse en utilisant la personnalisation de modèle.

Tout d’abord, vous devez décider quel modèle vous souhaitez modifier. Si, par exemple, vous souhaitez uniquement afficher les métadonnées du sujet et aucun commentaire de réponse, vous devrez modifier le modèle no_replies.

Une fois le modèle choisi, vous pouvez le modifier pour ajouter des métadonnées du sujet Discourse. Voici un extrait qui le fait, avec quelques commentaires expliquant ce que fait le code :

// Assurez-vous que wp-discourse est présent en utilisant votre méthode préférée,
// par exemple https://wordpress.stackexchange.com/questions/127818/how-to-make-a-plugin-require-another-plugin

// Exiger les utilitaires du plugin depuis le plugin wp-discourse
require_once ABSPATH . 'wp-content/plugins/wp-discourse/lib/plugin-utilities.php';
use WPDiscourse\Shared\PluginUtilities;

// Encapsulez votre modèle de métadonnées de sujet dans une classe afin de pouvoir inclure facilement les utilitaires du plugin
class DiscourseTopicMetadata {
  
  // Inclure les utilitaires du plugin WordPress dans votre classe
  use PluginUtilities;
  
  public function __construct() {

    // Ajouter le filtre de modèle lors de l'initialisation de la classe
    add_filter( 'discourse_no_replies_html', array( $this, 'topic_metadata_html' ) );
  }

  function topic_metadata_html( $input ) {
    // Obtenir le lien permanent Discourse à partir des métadonnées de l'article
    $discourse_permalink = get_post_meta( get_the_ID(), 'discourse_permalink', true );

    // Utiliser le lien permanent Discourse pour obtenir le JSON du sujet depuis Discourse, en utilisant la méthode d'aide des utilitaires du plugin qui gère l'autorisation pour vous
    $topic = $this->get_discourse_topic($discourse_permalink);
   
    // Afficher votre balisage, y compris les métadonnées du sujet que vous souhaitez afficher
    ob_start();
    ?>
    
    <div id="discourse-topic-meta">
        <div class="views">
          Vues
          <?php echo $topic->views; ?>
        </div>
        <div class="replies">
          Réponses
          <?php echo $topic->reply_count; ?>
        </div>
    </div>
    <?php
    
    return ob_get_clean();
  }
}

// Instancier la classe pour ajouter le filtre
new DiscourseTopicMetadata();

Pour plus de détails sur les métadonnées de sujet disponibles dans la réponse de get_discourse_topic, consultez Discourse API Docs.

10 « J'aime »

Est-il possible d’importer des articles de blog précédemment publiés ? Par exemple, des articles de blog des 30 derniers jours ? Juste pour peupler un peu cette catégorie. Merci.

2 « J'aime »

Il n’y a pas d’option d’importation en masse pour le moment. Vous pouvez toujours y parvenir en modifiant chacun des anciens articles et en les publiant sur Discourse.

2 « J'aime »

Je configure mes sites de manière à ce que seules quelques personnes se connectent à WordPress (auteurs), mais Discourse est pratiquement ouvert à tous. Discourse est utilisé pour l’authentification.

J’aimerais que les sujets créés à partir des articles affichent le nom de l’utilisateur Discourse au lieu de « Système » (ou de ce que j’ai défini pour le Nom d’utilisateur de publication).

En d’autres termes, le Nom d’utilisateur de publication est défini sur « Système ». Joe Blow publie un nouvel article dans WordPress. Joe Blow existe dans Discourse (puisque Discourse contrôle l’authentification, tous les utilisateurs WordPress sont également des utilisateurs Discourse). J’aimerais que le sujet soit affiché comme publié par Joe Blow au lieu de Système. Plus tard, sur les mêmes sites, Jane Doe publie un article, j’aimerais que le sujet dans Discourse soit affiché comme publié par Jane Doe au lieu de Système.

Est-ce réalisable ?

Je ne sais pas. Mais si vous consultez l’onglet Publish et là la dernière option Single User API Key Publication — c’est quelque chose que j’essaierais en premier.

Si vous utilisez DiscourseSSO (ou n’importe quelle connexion que c’est ou était…) alors personne ne peut s’enregistrer sur votre forum sans passer par WordPress. Donc, si WordPress contrôle le compte des éditeurs sur Discourse, comment feriez-vous cela sans exiger d’abord l’enregistrement sur WordPress pour tout le monde ? Je suis curieux car je pourrais utiliser quelque chose comme ça.

(Et… je suis encore hors sujet :man_facepalming:)

J’ai utilisé le paramètre du client DiscourseConnect. Celui-ci utilise Discourse comme système d’authentification et crée l’utilisateur dans WordPress s’il n’existe pas. D’après les instructions du plugin.

« Permettre à votre site de fonctionner comme un client DiscourseConnect permet à l’authentification des utilisateurs WordPress d’être gérée soit par votre forum Discourse, soit par votre site WordPress. Si un utilisateur Discourse se connecte à WordPress via un lien DiscourseConnect, il sera authentifié sur la base de ses identifiants Discourse. Si cet utilisateur n’existe pas encore sur votre site WordPress, un nouvel utilisateur sera créé. »

Les utilisateurs seront initialement définis comme abonnés dans WordPress, et je les définirai manuellement comme auteurs (selon les besoins). Je prévois de configurer le site de manière à ce que les utilisateurs non enregistrés puissent voir tout le contenu, et n’auront vraiment besoin de s’inscrire dans WP que s’ils souhaitent publier des articles.

Tous les utilisateurs de WordPress devront d’abord s’inscrire dans Discourse, puis le connecteur les connectera automatiquement à WP, ou créera un compte puis les connectera.

Oui, mais cela remplace toutes les autres méthodes d’authentification, et ensuite un utilisateur normal du forum doit s’inscrire sur WordPress avant d’avoir accès à Discourse.

Ou est-ce que je comprends mal quelque chose ?

D’après ce que j’ai vu, un utilisateur régulier de Discourse n’a jamais à se rendre sur le site WP. S’il décide de suivre un lien du site Discourse, il est automatiquement enregistré sur le site WP.

N’hésitez pas à consulter les deux sites pour voir de quoi je parle. Gardez à l’esprit qu’ils ne sont pas encore terminés, mais cette partie fonctionne maintenant.
Https://forum.oursail.boats est le Discourse
Https://www.oursail.boats est le site WP.

Créez un compte sur le site WP. Vous pourrez voir et répondre aux messages là-bas.

Ensuite, allez sur le site WP et sélectionnez l’élément de menu Connexion. Il contournera la connexion WP et vous connectera à la connexion Discourse (selon vos paramètres). Si vous avez sélectionné l’option pour rester connecté, il ne vous le demandera même pas. Il retournera immédiatement sur le site WP après vous avoir connecté.

Il vous suffit de vous assurer que les utilisateurs qui publient les articles sur Wordpress ont leur nom d’utilisateur Discourse renseigné dans le profil de l’utilisateur. Si l’utilisateur a un nom d’utilisateur Discourse, les publications qu’il effectue dans Wordpress seront publiées sur Discourse en utilisant son nom d’utilisateur.

Vous pouvez le mettre à jour manuellement ou automatiquement à l’aide du webhook Update Userdata (voir les paramètres « Webhooks » de WP Discourse).

3 « J'aime »

Avant de modifier manuellement les 393 articles publiés sur mon WP, je voulais juste vérifier s’il en est toujours ainsi ? C’est-à-dire qu’il n’y a toujours pas d’option d’importation en masse ? Merci !

Il n’y a pas d’option d’importation en masse. Gardez à l’esprit que si vous publiez 393 messages sur Discourse, vous aurez 393 ébauches de sujets. Je vous conseillerais d’envisager une stratégie plus ciblée. De quoi votre communauté va-t-elle réellement discuter maintenant ?

2 « J'aime »

Je suppose qu’ils ne le feront pas. Discourse est juste utilisé pour remplacer les commentaires, rien d’autre. Donc, ce n’est pas pour Discourse, mais pour WordPress.

J’étais dans une situation similaire. Parce que la plupart des articles WordPress du monde ne reçoivent aucun commentaire, ou que ceux-ci ne sont plus que du bruit, le mien n’a pas fait exception. Mais au lieu de travailler avec tout le contenu, j’utilisais mon ancien WP-content pour réveiller l’activité sur Discourse. Je n’ai pas connecté tous les articles en une seule fois, mais progressivement. Comme maintenant, il y a des sujets actifs sur les coups de chaleur chez les chiens et sur le nombre de calories que vous devriez manger en randonnée — de vieux articles qui ont une nouvelle vie sur Discourse.

S’il y avait une option pour tout connecter en masse, je le ferais — sans comprendre un tel potentiel manqué. Je pourrais même dire que l’option de masse devrait être enterrée à six pieds sous terre, même si vous pouviez la coder :wink:

2 « J'aime »

J’essaie juste de faire passer tous les commentaires dans Discourse avant de migrer le site Web de WordPress vers Ghost, car Ghost ne gère pas les commentaires (bien que vous puissiez le connecter à Discourse pour les commentaires).

Mais il vient de me venir à l’esprit que si je connecte d’abord mon nouveau Ghost à mon Discourse avant d’importer tous mes articles WordPress, cela pourrait fonctionner… peut-être (/moi s’en va essayer…)

Il ne migre pas les commentaires de WP vers Discourse. Il affiche simplement les publications Discourse dans WordPress.

Si j’ai bien compris…

1 « J'aime »

Il est inutile de lier les articles Wordpress et les sujets Discourse si vous êtes sur le point de migrer vers Ghost.

Bonjour à tous !

Je viens de terminer la configuration de ma communauté avec Discourse ! Je teste actuellement le plugin WP Discourse sur mon site de staging.

J’ai une préoccupation concernant d’éventuels problèmes de SEO. Plus précisément, en publiant le même contenu de WP vers Discourse, je crains une duplication de contenu du point de vue du SEO. Est-ce que Discourse marque le contenu du forum comme une copie à des fins de SEO ?

Bonjour Victor :slight_smile:

Vous devriez être tranquille du point de vue du référencement avec les paramètres par défaut (car il s’agit de domaines différents), mais vous pouvez également définir l’URL canonique du sujet Discourse comme étant l’URL de l’article Wordpress.

Activez le paramètre du site Discourse embed set canonical url, puis le permalien de l’article WP sera l’URL canonique du sujet discourse (c’est-à-dire qu’il apparaîtra dans la head du HTML du sujet Discourse comme lien canonique).

Pour plus de contexte à ce sujet, voir

1 « J'aime »

Merci @angus. J’apprécie vraiment cela. Pour moi, il est plus sûr de prendre le contrôle avec le référencement, plutôt que de le laisser au hasard !

1 « J'aime »

J’essaie de définir différentes catégories pour différents custom_post_types. Le code ci-dessous sélectionne la bonne catégorie dans l’administration Wordpress. Cependant, lors de la publication sur Discourse, la catégorie n’y est pas définie (et prend par défaut la catégorie non classée)…

Peut-être que je rate quelque chose d’évident ?

// WP Discourse définir les catégories de forum CPT pour les 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;
}

Vous avez fait une supposition raisonnable sur la façon d’atteindre votre objectif, mais wp_discourse_publish_categories ne fonctionnera pas de manière fiable si vous filtrez sur une seule catégorie avec l’éditeur Gutenberg.

Vous devriez plutôt utiliser wpdc_publish_post_category :

Je mettrai à jour le message d’origine pour en tenir compte.

1 « J'aime »