Hey, could you help me how to sync Wordpress and Discourse categories?
E.g., when user on my website create new category, I want it to be created in Discourse, and both post and forum topic will have the same category.
Hey, could you help me how to sync Wordpress and Discourse categories?
E.g., when user on my website create new category, I want it to be created in Discourse, and both post and forum topic will have the same category.
This code isnât fully tested and would need error handling/safety checks/logging for production use, but should get you started:
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 );
}
}
}
Hey, Gary, thank you for your answer!
Unfortunately I have an error âsyntax error, unexpected â->â (T_OBJECT_OPERATOR)â for the following line:
new \WPDiscourse\Utilities\PublicPluginUtilities()->discourse_request(
The PHP version is 7.4, it must work. I donât have the idea about the reason error occurs.
I did say it was untested, right? I canât offer you too much help with debugging right now, but hereâs an updated version that should fix that issue as well as removing a redundant check in the second 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';
// 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 is only about three months away from EOL, so you should really start planning to upgrade your hosting environment, if you havenât already
Yeah, you did But the fact that I am not well at coding makes me look everywhere for a solution. I havenât found any freelancer yet, so I was hoping to make it work by myself or with your advice
Thank you again, Iâll check!