根据帖子类别自动选择主题类别?

我特意在 WordPress 和 Discourse 中设置了完全相同的分类,但没有选项可以将帖子分类设置为主题分类,因此我每次发布后都必须手动设置。

这似乎是一个很明显的功能,也许是我忽略了什么?

我正在使用 WP Discourse 插件。

1 个赞

您可以使用 wpdc_publish_post_category 过滤器来实现这一点。它看起来会像这样(未经测试的代码示例,但可能开箱即用):

function wpdc_change_post_category( $category, $post_id ) {
  $wp_category_name = get_the_category( $post_id )[0]->name;
  $discourse_categories = WPDiscourse\Utilities\Utilities::get_discourse_categories();
  $discourse_category = array_search( $wp_category_name, array_column( $discourse_categories, 'name' ));
  return $discourse_category['id'];
}
add_filter( 'wpdc_publish_post_category', 'wpdc_change_post_category' );

然后,无论您选择哪个类别,帖子都将始终发布到名称与 WordPress 帖子类别名称匹配的类别。请确保这些名称完全匹配,否则将无法正常工作。

官方支持此功能将充满困难,因为它将依赖用户维护具有完全相同名称的类别列表,假设两个平台之间的类别模型保持不变,并且必须处理 WordPress 的分类系统本质上是可变的这一事实(即,它在安装了该插件的每个 WordPress 上都不会相同)。

1 个赞

谢谢!

您可以使用 wpdc_change_post_category 过滤器来实现这一点。它应该类似于(未经测试的示例代码,但可能开箱即用):

您是指 wpdc_publish_post_category 吗?wpdc_change_post_category 似乎并不存在。它只是一个自定义函数名,可以是任何名称,对吗?

$wp_category_name = get_the_category( $post_id )[0]->name 缺少了结尾的 ;

之后,我收到了一个关于 function wpdc_change_post_category( $category, $post_id ) {参数过少 错误。可能是因为 $category 未定义?我稍后可能会进行更多测试。

关于将其添加为官方功能,我认为这不会太麻烦,考虑到以下两种选择:

  1. 强制分类更新 选项已存在。这可以扩展为一个功能,使 Discourse/WordPress 分类始终保持同步。

或者

  1. 也许它们根本不需要同步,而是如果 Discourse 中不存在某个分类,它会自动创建它。
2 个赞

是的,没错,抱歉打错了。

通过 API 读取分类列表(强制分类更新)与自动同步 WordPress 和 Discourse 之间的分类本身,这之间存在很大的区别。

1 个赞

将类似的代码用于将 wp_categories 映射到 discourse_tags 是否可行?

我正过着“分类就是墙壁”的生活 :sunglasses:

遗憾的是,目前没有等效的 wpdc_publish_post_tags 过滤器。

您具体想通过标签实现什么目标?

我有一个自定义文章类型“policies”,以及一个分两级(父/子)的自定义分类法“policy_categories”。大约有 45 个子分类。

我已经将 WP Discourse 设置为发布到 Discourse 的“policies”分类中,但与其创建大量的子分类(我已经在这个论坛上阅读过相关内容),不如将子分类创建为标签似乎更好。

我将有各种经验水平的 WordPress 用户发布“policies”(如果只有我一个人做,我每次都会给它们打上标签)。因此,为了节省一个额外的步骤和可能大量的支持麻烦,最好有一个过滤器可以让 WP Discourse 获取 WordPress 分类并添加匹配的 Discourse 标签。

我很乐意确保分类和标签匹配 ID/slug 等,因为我会作为管理员来维护这些内容的任何更新。

感谢您的帮助。

也许这是给#marketplace的?

虽然没有专门的标签过滤器,但有一个通用过滤器可供您使用:wpdc_publish_body。在您的情况下,它看起来像这样

add_filter( 'wpdc_publish_body', function( $body, $remote_post_type, $post_id ) {
   // 获取帖子策略分类的代码
   if ( // 如果有帖子策略 ) {
      $policy_tags = // 将帖子策略分类映射到适当的标签
      $body['tags'] = $policy_tags
   }
   return $body;
}, 10, 3);