嘿,你能帮我同步 WordPress 和 Discourse 的类别吗?
例如,当用户在我的网站上创建新类别时,我希望它在 Discourse 中创建,并且帖子和论坛主题将具有相同的类别。
嘿,你能帮我同步 WordPress 和 Discourse 的类别吗?
例如,当用户在我的网站上创建新类别时,我希望它在 Discourse 中创建,并且帖子和论坛主题将具有相同的类别。
此代码未经完全测试,在生产环境中使用需要进行错误处理/安全检查/日志记录,但应该能为您提供一个起点:
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';
// 使用 WPDiscourse 插件生成一个新分类
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' ) ) {
// 仅在初始保存时启用 Discourse 发布。
update_post_meta( $object_id, 'publish_to_discourse', true );
$discourse_publish_option = get_option( 'discourse_publish' );
// 根据 WP 分类设置 Discourse 分类
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 );
}
}
}
嘿,Gary,谢谢你的回答!
不幸的是,我的代码出现了错误“语法错误,意外的‘->’(T_OBJECT_OPERATOR)”,错误发生在以下行:
new \\WPDiscourse\\Utilities\\PublicPluginUtilities()-\u003ediscourse_request(
PHP 版本是 7.4,它应该可以工作。我不知道错误发生的原因。
我确实说过它未经测试,对吧?
我现在无法提供太多调试帮助,但这是一个更新版本,应该可以修复该问题,并移除第二个操作中的冗余检查:
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 距离 EOL(生命周期结束)只有大约三个月了,所以你应该开始计划升级你的托管环境,如果你还没有的话 ![]()
是的,你做到了
但我不太会编程,这让我到处寻找解决方案。我还没有找到任何自由职业者,所以我想自己解决或者听取你的建议 :)\n\n再次感谢,我会去看看!