Sincronizza categorie Wordpress e Discourse

Ehi, potresti aiutarmi a sincronizzare le categorie di Wordpress e Discourse?

Ad esempio, quando un utente sul mio sito web crea una nuova categoria, voglio che venga creata in Discourse e che sia il post che l’argomento del forum abbiano la stessa categoria.

Questo codice non è completamente testato e richiederebbe gestione degli errori/controlli di sicurezza/registrazione per l’uso in produzione, ma dovrebbe essere un buon punto di partenza:

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';
	// Usa il plugin WPDiscourse per generare una nuova categoria
	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' ) ) {
		// Abilita la pubblicazione in Discourse, solo durante il salvataggio iniziale.
		update_post_meta( $object_id, 'publish_to_discourse', true );
		$discourse_publish_option = get_option( 'discourse_publish' );
		// Imposta la categoria di Discourse in base alla categoria di 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 Mi Piace

Ehi, Gary, grazie per la tua risposta!

Purtroppo ho un errore “syntax error, unexpected ‘->’ (T_OBJECT_OPERATOR)” per la seguente riga:

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

La versione di PHP è 7.4, deve funzionare. Non ho idea del motivo per cui si verifica l’errore.

Ho detto che non era testato, vero? :sweat_smile: Al momento non posso offrirti molto aiuto con il debug, ma ecco una versione aggiornata che dovrebbe risolvere quel problema e rimuovere un controllo ridondante nella seconda azione:

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';
	// Use the WPDiscourse plugin to generate a new category
	$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' ) ) {
		// Enable publishing in Discourse, during initial save only.
		update_post_meta( $object_id, 'publish_to_discourse', true );
		$discourse_publish_option = get_option( 'discourse_publish' );
		// set the Discourse category based on WP category
		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 è a soli tre mesi dalla fine del supporto (EOL), quindi dovresti davvero iniziare a pianificare l’aggiornamento del tuo ambiente di hosting, se non l’hai già fatto :calendar:

Sì, l’hai fatto :sweat_smile: Ma il fatto che non sia bravo a programmare mi fa cercare una soluzione ovunque. Non ho ancora trovato un freelancer, quindi speravo di farlo funzionare da solo o con il tuo consiglio :)\n\nGrazie ancora, controllerò!