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 );
}
}
}
Ich habe doch gesagt, dass es ungetestet ist, oder? 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
Ja, das hast du 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