投稿カテゴリに基づいてトピックカテゴリを自動的に選択しますか?

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 が未定義であるためかもしれません。後でさらにテストするかもしれません。

これを公式機能として追加することについては、2つの選択肢を考慮すると、それほど厄介な問題にはならないと思います。

  1. カテゴリ強制更新 オプションは既に存在します。これを、Discourse/WordPress のカテゴリを常に同期させる機能に拡張できます。

または

  1. 同期する必要はなく、Discourse にカテゴリが存在しない場合は、単に作成するだけかもしれません。
「いいね!」 2

はい、その通りです。タイプミスをお詫びします。

API経由でカテゴリリストを読み取る(カテゴリ強制更新)ことと、WordPressとDiscourseの間でカテゴリ自体を自動的に同期させることの間には、大きな違いがあります。

「いいね!」 1

wp_categories を discourse_tags にマッピングするのに同様のコードは機能しますか?

私は「カテゴリーは壁である」という人生を送っています :sunglasses:

残念ながら、現時点では同等の wpdc_publish_post_tags フィルターはありません。

タグで正確に何を達成しようとしていますか?

WordPressのカスタム投稿タイプ「policies」と、2レベル(親/子)の階層カスタムタクソノミー「policy_categories」があります。子カテゴリは約45個あります。

WP Discourseを「policies」のDiscourseカテゴリに公開するように設定しました。しかし、このフォーラムで読んだように、多数のサブカテゴリを作成するのではなく、サブカテゴリをタグとして作成する方が良いようです。

様々な経験レベルのWordPressユーザーが「policies」を公開する予定です(私一人であれば、毎回タグ付けするだけです)。そのため、余分な手順とサポートの手間を省くために、WordPressカテゴリを取得して対応するDiscourseタグを追加するフィルターがあれば理想的です。

カテゴリとタグのID/スラッグなどを一致させるようにします。これらの管理は管理者として行うためです。

ご協力ありがとうございます。

これは#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);