Как именно Discourse заменяет комментарии WP?

Мы используем Discourse вместо комментариев WordPress (опция «Удалить шаблон комментариев WordPress» включена, как и Ajax). У меня настроен Toolset Access Control для пользовательского типа записей, которые публикуются в Discourse (в приватную категорию, соответствующую настройкам контроля доступа). Обычно такой контроль также влияет на видимость комментариев к записям, но в данном случае он не влияет на отображение комментариев Discourse. Есть какие-либо идеи?

Возможно, я смогу добавить здесь дополнительный контекст:

У нас есть пользовательский тип записи (custom post type) на сайте WordPress, записи которого должны быть связаны с темами в закрытой категории Discourse. Те же пользователи, у которых есть доступ к этой категории в Discourse, имеют доступ к записям на WordPress. Мы решаем это, назначая этих пользователей роли «Редактор» (Editor) в WordPress, тогда как в Discourse они входят в группу, предоставляющую доступ к закрытой категории.

Никогда неаутентифицированные пользователи не должны видеть ни записи на WordPress, ни ветки тем в Discourse. Это работает как задумано благодаря контролю доступа через роли и группы соответственно. Сторона WordPress, как отмечено выше, использует плагин Toolset Access для ограничения доступа ко всем записям этого пользовательского типа.

Однако закрытые ветки обсуждений из Discourse отображаются публично при встраивании в WordPress, даже если содержимое самой записи скрыто. Иными словами, встроенные комментарии Discourse не скрываются механизмом контроля доступа. Мы пытаемся понять, что может выводить этот вывод из контура контроля, и как это исправить.

Плагин WP Discourse отображает комментарии, загружая пользовательский шаблон комментариев. Для этого он использует фильтр WordPress comments_template. Мне пока неясно, почему комментарии продолжают загружаться, несмотря на то, что для типа записей настроен Toolset Access Control. Я разберусь, что именно происходит.

Кажется, в плагине стоит добавить опцию, чтобы не загружать комментарии для записей, опубликованных в закрытую категорию Discourse. При включении этой опции будет отображаться только ссылка на тему в Discourse. Однако не уверен, что это решит вашу проблему.

Привет, Саймон, я работаю над этим вместе с @Кайлой. То, что вы описываете здесь, решило бы нашу проблему.

Также было бы полезно узнать, как включить шаблон комментариев Discourse в рамках нашей более детальной системы контроля доступа. Спасибо!

Отлично! Думаю, проблем с внедрением этого в следующее обновление плагина не возникнет. Постараюсь завершить работу к концу недели. Буду держать вас в курсе прогресса.

Полагаю, проблема, с которой вы столкнулись, связана с приоритетом, с которым WP Discourse подключается к хуку фильтра comments_template WordPress. Плагин WP Discourse использует приоритет 20 для вызова функции, подключающейся к этому фильтру. Плагин Toolset, вероятно, подключается к этому фильтру с более низким приоритетом, чтобы предотвратить загрузку шаблона комментариев для защищённых страниц.

Я связался с разработчиками Toolset по этому вопросу и ошибся насчет ожидаемого поведения. Плагин Toolset Access вообще не подключается к шаблону комментариев. Скрытие комментариев для ограниченного контента требует написания пользовательского кода, который подключается к их фильтру toolset_access_api_get_post_permissions, чтобы запретить или разрешить рендеринг шаблона комментариев на уровне темы. Приношу извинения, что не сразу понял: ограничение контента в их случае буквально касается самого шаблона контента. :woman_facepalming:

Эта опция была добавлена в плагин в версии 2.0.7. Она доступна в репозитории WordPress прямо сейчас.

Когда вы выбираете опцию «Включить комментарии Discourse» в плагине, теперь вы увидите три варианта типов комментариев:

Выберите опцию «Отображать комментарии для публичных тем», чтобы комментарии отображались только для тем, находящихся в публичных категориях Discourse. Если тема опубликована в закрытую категорию, будет отображаться ссылка на тему и её количество комментариев.

Если тема, опубликованная из WordPress в Discourse, перемещена из публичной в закрытую категорию на Discourse, комментарии будут удалены из WordPress и заменены ссылкой. Это изменение может занять до 10 минут, так как плагин WP Discourse кэширует данные комментариев, полученные от Discourse. Вы можете немедленно сбросить кэш категорий, выбрав опцию «Принудительное обновление категорий» на странице настроек публикации плагина и сохранив эту страницу настроек.

Чтобы плагин мог получать доступ к разрешениям категорий для подкатегорий Discourse, необходимо выбрать опцию «Отображать подкатегории» на вкладке настроек публикации плагина. Если эта опция не включена, а опция «Отображать комментарии для публичных тем» включена, все подкатегории на Discourse будут считаться закрытыми, и вместо комментариев будет отображаться ссылка.

Примечание: распознавание плагин изменений категорий, внесённых непосредственно в Discourse, доступно только если ваш сайт работает на последней версии Discourse.

Для программного контроля того, для каких пользователей отображаются комментарии Discourse, вы можете полностью обойти загрузку комментариев WP Discourse для пользователя с помощью хука фильтра wpdc_load_comments_template_for_user. Этот хук передаёт три аргумента: $load_template (по умолчанию true), $current_user и $post_id. Верните false из функции, подключённой к этому фильтру, чтобы предотвратить загрузку комментариев для конкретного пользователя.

Изменения, которые я наблюдаю с этим обновлением, заключаются в следующем: хотя discourse_replies_html загружается и отображается как ожидалось, похоже, что discourse_no_replies_html не загружается (я вижу текстовую ссылку «Join Discussion Link: no Comments», но не наш шаблон). Кроме того, если пост ещё не опубликован в Discourse, появляется новое сообщение: «Comments are not currently available for this post.» Все это относится к публичным постам в публичных категориях Discourse.

Для постов, опубликованных в приватной категории Discourse, похоже, загружается стандартная форма комментариев WordPress. Ссылки на тему в Discourse нет.

Параметр «Display comments for public topics» включён, как и «Display Subcategories». Я обновил кэш комментариев HTML и принудительно обновил категорию. Не упускаю ли я что-то?

Спасибо, что сообщили об этом! Проблема должна быть исправлена в версии WP Discourse 2.0.8.

Сегодня или завтра я внесу несколько изменений в плагин, которые должны устранить и другие проблемы, о которых вы сообщали. Ошибка загрузки шаблона комментариев WordPress для постов, которые ещё не опубликованы в Discourse, требовала немедленного исправления.

Вот что я вижу, когда выбираю опцию «Показывать комментарии для публичных тем» и опцию «Показать существующие комментарии WordPress», а затем публикую пост с существующими комментариями WordPress:

С точки зрения пользователя это кажется не очень понятным (это можно исправить с помощью кастомизации WordPress), но ссылка на комментарии Discourse существует.

Если у вас включена настройка сайта «Кэшировать HTML комментариев», попробуйте её отключить. Эта настройка не должна вызывать проблем, но снятие галочки упростит отладку.

Пришлите мне любые дополнительные сведения, которые у вас есть по этой проблеме. Позже сегодня я выпущу небольшое обновление в репозиторий WordPress, чтобы исправить проблему с кнопкой «Отвязать тему», возникающую при выпуске WordPress 5.5.

Мы находимся на версии 2.1.1 с WP 5.5. Кэширование комментариев у нас не включено, и мы не используем комментарии WP (хотя теперь по умолчанию форма больше не загружается, что хорошо).

Однако иногда пользовательские шаблоны загружаются, а иногда — нет. Мы вернулись к отображению комментариев для всех публикаций, независимо от того, является ли тема в Discourse приватной или нет, но это не помогло. Я не могу понять причину, но проблема, похоже, устойчива для отдельных публикаций. Примеры для публичных публикаций в публичных темах:

Нет комментариев, не загружается discourse_no_replies_html:

Нет комментариев, загружается discourse_no_replies_html:

Есть комментарии, не загружается discourse_replies_html:

Есть комментарии, загружается discourse_replies_html:

Возможно, проблема связана с пользовательскими шаблонами, но есть ещё один отчёт о проблеме, когда шаблон комментария не загружается, а вместо него отображается ссылка на комментарий. Мне не удалось воспроизвести эту проблему на моём тестовом сайте, но я внесу небольшое изменение в плагин, которое должно её исправить. Готовое решение будет доступно к утру завтрашнего дня. Спасибо за ваше терпение!

Не могли бы вы попробовать обновить плагин до версии 2.1.2 и сообщить, решило ли это проблему?

Могу подтвердить, что обновление до версии 2.1.2 решило проблему с загрузкой шаблонов для нас. Спасибо!