Я намеренно создал абсолютно одинаковые категории в WordPress и Discourse, но нет возможности автоматически назначать категорию поста в качестве категории темы, поэтому мне приходится вручную устанавливать её после каждой публикации.
Кажется, это очевидная функция, возможно, я что-то упускаю?
Тогда независимо от выбранной категории пост всегда будет публиковаться в категорию, название которой совпадает с названием категории WordPress. Однако убедитесь, что названия совпадают точно, иначе это не сработает.
Официальная поддержка этой функции как отдельной возможности сопряжена с трудностями, поскольку она потребует от пользователей поддерживать списки категорий с точно одинаковыми названиями, предполагает, что модели категорий между двумя платформами останутся неизменными, и должна учитывать тот факт, что система таксономии WordPress по своей природе изменяема (то есть она не будет одинаковой на каждом сайте WordPress, где установлен плагин).
Это можно сделать с помощью фильтра wpdc_change_post_category. Это должно выглядеть примерно так (непроверенный пример кода, но, возможно, заработает сразу):
Думаю, вы имели в виду wpdc_publish_post_category? Фильтр wpdc_change_post_category, похоже, на самом деле не существует. Это просто произвольное имя функции, которое может быть любым, верно?
В строке $wp_category_name = get_the_category( $post_id )[0]->name отсутствует закрывающая ;.
После этого я получаю ошибку too few arguments (слишком мало аргументов) для function wpdc_change_post_category( $category, $post_id ) {. Возможно, это потому, что $category не определена? Позже я проведу дополнительные тесты.
Что касается добавления этого как официальной функции, я не думаю, что это создаст большие проблемы, учитывая два варианта:
Уже существует опция Force Category Update (Принудительное обновление категории). Её можно расширить до функции, которая принудительно синхронизирует категории Discourse и WordPress.
или
Возможно, им вообще не нужно быть синхронизированными; если категория отсутствует в Discourse, она просто создаётся.
Существует большая разница между чтением списка категорий через API (принудительное обновление категорий) и автоматической синхронизацией самих категорий между WordPress и Discourse.
У меня есть пользовательский тип записи policies с иерархической пользовательской таксономией policy_categories в два уровня (родитель/потомок). Всего около 45 дочерних категорий.
Я настроил WP Discourse для публикации в категорию Discourse под названием policies, но вместо создания огромного набора подкатегорий (после изучения этого форума) кажется лучше создать подкатегории в виде тегов.
Различные пользователи WordPress будут публиковать policies с разным уровнем опыта (если бы это делал только я, я бы просто добавлял теги каждый раз). Чтобы избежать лишнего шага и, вероятно, значительной части проблем с поддержкой, в идеале нужен фильтр, который заставит WP Discourse брать категории WordPress и добавлять соответствующие теги Discourse.
Я готов убедиться, что категории и теги совпадают по ID/слагам и т.д., так как я буду самостоятельно обновлять их как администратор.
Хотя отдельного фильтра для тегов нет, вы можете использовать общий фильтр: 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);