WordPress und Discourse Kategorien synchronisieren

Hallo, könntest du mir helfen, wie man WordPress- und Discourse-Kategorien synchronisiert?

Wenn ein Benutzer auf meiner Website eine neue Kategorie erstellt, möchte ich, dass sie in Discourse erstellt wird und sowohl der Beitrag als auch das Forum-Thema dieselbe Kategorie haben.

Dieser Code ist nicht vollständig getestet und würde Fehlerbehandlung/Sicherheitsprüfungen/Protokollierung für den Produktionseinsatz erfordern, sollte Ihnen aber den Einstieg erleichtern:

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
	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' ) ) {
		// 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 ) && 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 „Gefällt mir“

Hallo Gary, danke für deine Antwort!

Leider erhalte ich einen Fehler „syntax error, unexpected ‘->’ (T_OBJECT_OPERATOR)“ für die folgende Zeile:

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

Die PHP-Version ist 7.4, es muss funktionieren. Ich habe keine Ahnung, warum der Fehler auftritt.

Ich habe doch gesagt, dass es ungetestet ist, oder? :sweat_smile: Ich kann dir im Moment nicht viel beim Debuggen helfen, aber hier ist eine aktualisierte Version, die dieses Problem beheben und eine redundante Prüfung in der zweiten Aktion entfernen sollte:

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 ist nur noch etwa drei Monate von EOL entfernt, daher solltest du wirklich mit der Planung beginnen, deine Hosting-Umgebung zu aktualisieren, falls du das noch nicht getan hast :calendar:

Ja, das hast du :sweat_smile: Aber da ich nicht gut im Programmieren bin, suche ich überall nach einer Lösung. Ich habe noch keinen Freiberufler gefunden, also hoffte ich, es selbst oder mit deinem Rat hinzubekommen :slight_smile:

Danke nochmals, ich werde nachsehen!