Synchroniser les catégories Wordpress et Discourse

Salut, pourriez-vous m’aider à synchroniser les catégories Wordpress et Discourse ?

Par exemple, lorsqu’un utilisateur crée une nouvelle catégorie sur mon site Web, je souhaite qu’elle soit créée dans Discourse, et que le message et le sujet du forum aient la même catégorie.

Ce code n’est pas entièrement testé et nécessiterait une gestion des erreurs/des vérifications de sécurité/une journalisation pour une utilisation en production, mais il devrait vous permettre de démarrer :

add_action( 'create_category', 'discourse_create_category', 10, 1 );
function discourse_create_category( $term_id ) {
	$category = get_term_by( 'id', $term_id, 'category' );
	$name = $category->name;
	$path = '/categories.json';
	// Utiliser le plugin WPDiscourse pour générer une nouvelle catégorie
	new \WPDiscourse\Utilities\PublicPluginUtilities()$discourse_request(
		$path,
		[
			'method' => 'POST',
			'name'   => $name,
		]
	);
}

add_action( 'set_object_terms', 'discourse_set_object_terms', 10, 1 );
function discourse_set_object_terms( $object_id ) {
	if ( ! metadata_exists( 'post', $object_id, 'publish_to_discourse' ) ) {
		// Activer la publication dans Discourse, lors de la sauvegarde initiale uniquement.
		update_post_meta( $object_id, 'publish_to_discourse', true );
		$discourse_publish_option = get_option( 'discourse_publish' );
		// Définir la catégorie Discourse en fonction de la catégorie WP
		if ( is_array( $discourse_publish_option ) && array_key_exists( 'publish-category', $discourse_publish_option ) ) {
			$categories_list = wp_get_post_categories( $object_id );
			update_post_meta( $object_id, 'publish_post_category', $categories_list[0]->name );
		}
	}
}
1 « J'aime »

Salut Gary, merci pour ta réponse !

Malheureusement, j’ai une erreur « syntax error, unexpected ‘->’ (T_OBJECT_OPERATOR) » pour la ligne suivante :

new \WPDiscourse\Utilities\PublicPluginUtilities()->discourse_request(

La version de PHP est 7.4, cela doit fonctionner. Je n’ai aucune idée de la raison pour laquelle l’erreur se produit.

Je l’ai dit que ce n’était pas testé, n’est-ce pas ? :sweat_smile: Je ne peux pas vous aider beaucoup avec le débogage pour le moment, mais voici une version mise à jour qui devrait corriger ce problème ainsi que supprimer une vérification redondante dans la deuxième action :

add_action( 'create_category', 'discourse_create_category', 10, 1 );
function discourse_create_category( $term_id ) {
	$category = get_term_by( 'id', $term_id, 'category' );
	$name = $category->name;
	$path = '/categories.json';
	// Utiliser le plugin WPDiscourse pour générer une nouvelle catégorie
	$utils = new \WPDiscourse\Utilities\PublicPluginUtilities();
	$utils->discourse_request(
		$path,
		[
			'method' => 'POST',
			'name'   => $name,
		]
	);
}

add_action( 'set_object_terms', 'discourse_set_object_terms', 10, 1 );
function discourse_set_object_terms( $object_id ) {
	if ( ! metadata_exists( 'post', $object_id, 'publish_to_discourse' ) ) {
		// Activer la publication dans Discourse, uniquement lors de la sauvegarde initiale.
		update_post_meta( $object_id, 'publish_to_discourse', true );
		$discourse_publish_option = get_option( 'discourse_publish' );
		// Définir la catégorie Discourse en fonction de la catégorie WP
		if ( is_array( $discourse_publish_option ) ) {
			$categories_list = wp_get_post_categories( $object_id );
			update_post_meta( $object_id, 'publish_post_category', $categories_list[0]->name );
		}
	}
}

7.4 n’est qu’à environ trois mois de sa fin de vie, vous devriez donc vraiment commencer à planifier la mise à niveau de votre environnement d’hébergement, si ce n’est pas déjà fait :calendar:

Ouais, tu l’as fait :sweat_smile: Mais le fait que je ne sois pas doué en codage me pousse à chercher une solution partout. Je n’ai pas encore trouvé de freelance, alors j’espérais y arriver par moi-même ou avec tes conseils :slight_smile:

Merci encore, je vais vérifier !