Ссылка WP на Discourse не отображается при использовании пользовательского кода

Здравствуйте,

У меня возникла проблема: на стороне WordPress нет ссылки на форум Discourse. Я нашёл несколько ответов на темы форума по этому вопросу:

  • Все поля типа «Текстовый контент» заполнены в админ-панели WordPress → раздел «Плагины».
  • Синхронизация работает; я вижу комментарии с обеих сторон.
  • Строка URL доступна в таблице базы данных _postmeta.

image

В разделе комментариев отображаются уведомления:

**Уведомление**: Попытка доступа к смещению массива для значения типа null в файле **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** на строке **90**
**Уведомление**: Попытка доступа к смещению массива для значения типа null в файле **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** на строке **106**
**Уведомление**: Попытка доступа к смещению массива для значения типа null в файле **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** на строке **127**
**Уведомление**: Попытка доступа к смещению массива для значения типа null в файле **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** на строке **127**
**Уведомление**: Попытка доступа к смещению массива для значения типа null в файле **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** на строке **148**
**Уведомление**: Попытка доступа к смещению массива для значения типа null в файле **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** на строке **148**

Все они связаны с переменной $URL в файле. Я вызываю комментарии следующим образом:

<?php
global $post;
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
$discourse_comments = DiscourseUtilities::get_discourse_comments($post->ID);
echo $discourse_comments;
?>

Примеры URL:
https://fxweb.snowfreakz.nl/nogmaals-een-test/
https://fxdisc.snowfreakz.nl/t/nogmaals-een-test/23/2

<? ` echo get_post_meta( $post->ID, 'discourse_permalink', true ); ` ?>

Прямой вызов вышеуказанного кода не возвращает никакого содержимого в виде ссылки (я нашёл это в другой теме).

Использую Apache / PHP7.4 / WP 6.0.2.
После нескольких часов отладки я исчерпал варианты. Возможно, у кого-то есть подсказка!?
Заранее спасибо,

Йуп

Привет, Йёп,

Если оба эти утверждения верны, значит, проблема где-то ещё (не в WP Discourse) на вашем сайте.

Это началось совсем недавно? Что ещё изменилось в вашей установке WP в последнее время? Другие плагины, темы, кэширование и т. д.

Привет, Энгус,

Спасибо за обращение… У меня «чистая» установка WordPress с конструктором тем Bricks и только что установленным плагином WPdiscourse для подключения. Помимо серверного кэширования через mod_headers, нет никаких агрессивных плагинов, изменяющих скрипты.

Только что снова добавил прямую строку PHP и… магическим образом URL появился. Не понимаю, что я сделал иначе.

<?php
global $post;
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
$discourse_comments = DiscourseUtilities::get_discourse_comments($post->ID);
echo $discourse_comments;

echo get_post_meta( $post->ID, 'discourse_permalink', true );
?>

Но у меня всё ещё есть уведомления, которые относятся к строкам кода, где должен формироваться URL, а ссылка после «Продолжить обсуждение на» не отображается.

https://fxweb.snowfreakz.nl/nogmaals-een-test/

Йуп

Хорошо. Зачем вы загружаете комментарии и постоянную ссылку, используя свой собственный код? Плагин делает это за вас.

Привет,

Когда я включаю стандартные комментарии WordPress (которые являются элементом шаблона Bricks), отображается «обычная форма комментариев WP», которую плагин Discourse Reviews не заменяет. См. URL выше; я изменил макет, добавив комментарии WP ниже блога.

Настройки бэкенда

Поэтому я добавил код вручную, так как это отображало отзывы и, вероятно, переопределяет любые несовместимости с конструктором Bricks.

Йуп

Хорошо. Вероятно, у вас проблема с приоритетом загрузки в конструкторе шаблонов, который вы здесь используете. Завтра я попробую воссоздать это. Подождите немного.

Могу ли я отправить вам конструктор шаблонов для справки?

В следующем выпуске (в настоящее время готовится к релизу) версия 2.4.6) произойдут различные изменения в утилитарной функции get_discourse_comments. Обновлённая сигнатура метода будет выглядеть следующим образом:

/**
* Получение HTML-разметки комментариев Discourse для отображения без загрузки шаблона комментариев.
*
* @param int $post_id ID публикации, для которой нужно отобразить комментарии.
* @param bool $perform_sync Определяет, выполняется ли синхронизация комментариев при загрузке.
* @param bool $force_sync Определяет, следует ли обходить кэш синхронизации комментариев при загрузке.
* @param string $comment_type Тип отображения комментариев.
*
* @return string
*/
public static function get_discourse_comments( $post_id, $perform_sync = true, $force_sync = false, $comment_type ) {

@Joep_Kannegieter Это приведёт к нескольким последствиям для вашего случая (и для ряда других):

  • Отображение комментариев будет работать
  • Вы сможете программно управлять типом отображения комментариев (то есть все комментарии или ссылка на комментарии)
  • Вы сможете программно управлять кэшем комментариев

Подробнее:

Спасибо! Сейчас установлю и попробую. Сообщу о результатах.

Ещё не выпущено. Подождите, пока в панели администратора WordPress не появится версия плагина 2.4.6, готовая к обновлению (я также напишу вам здесь).

Привет, Ангус,

Возвращаюсь к этому вопросу; в целом «я заставил это работать», но не с шаблоном Bricks Builder.
Когда я переключаюсь на тему twentytwenty, интеграция с Discourse отображается ниже поста в блоге, заменяя поле «Комментарии»:

При использовании Bricks Builder есть элемент «Комментарии», который загружает комментарии WP; он не заменяется плагином. Также это не вызывается программно:

При программном вызове возникает ошибка:

Ошибка: Слишком мало аргументов для функции WPDiscourse\Utilities\Utilities::get_discourse_comments(), передан 1 в /home/u43655p432443/domains/domain.nl/public_html/wp-content/themes/bricks/includes/elements/code.php(159) : eval()'d code на строке 4, а ожидается ровно 4

Так что проблема связана с Bricks. Я также обращусь к сообществу Bricks.

Йуп

На данный момент я просто использую PHP для вызова комментариев в шаблоне, применяя

<?php comments_template(); ?>

Это пропускает элемент комментариев Bricks и использует стандартные возможности WordPress; это работает.

Joep

Эта ошибка указывает на то, что ваш вызов утилитарной функции get_discourse_comments требует обновления. Вот пример того, как её можно использовать.

global $post;
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
$discourse_comments = DiscourseUtilities::get_discourse_comments($post->ID, true, true, 'display-comments');
echo $discourse_comments;