Hola, ¿podrías ayudarme a sincronizar las categorías de Wordpress y Discourse?
Por ejemplo, cuando un usuario en mi sitio web crea una nueva categoría, quiero que se cree en Discourse, y tanto la publicación como el tema del foro tendrán la misma categoría.
Este código no está completamente probado y necesitaría manejo de errores/verificaciones de seguridad/registro para uso en producción, pero debería servirle para empezar:
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 );
}
}
}
¿Dije que no estaba probado? No puedo ofrecerte mucha ayuda para depurar en este momento, pero aquí tienes una versión actualizada que debería solucionar ese problema, además de eliminar una comprobación redundante en la segunda acción:
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 está a solo unos tres meses de su fin de soporte, así que realmente deberías empezar a planificar la actualización de tu entorno de alojamiento, si aún no lo has hecho
Sí, lo hiciste Pero el hecho de que no soy bueno programando me hace buscar una solución por todas partes. Aún no he encontrado ningún freelancer, así que esperaba poder hacerlo funcionar por mi cuenta o con tu consejo