WPのカスタムコード使用時にDiscourseへのリンクバックが表示されない

こんにちは。

WP側でDiscourseフォーラムへのリンクが表示されない問題が発生しています。この問題に関するフォーラムのトピックで見つけた回答は以下の通りです。

  • WP管理画面の「プラグイン」セクションにあるすべての「テキストコンテンツ」フィールドが入力されています。
  • 同期は実行されており、両方のサイドでコメントを確認できます。
  • URL文字列は _postmeta DBテーブルに存在します。

image

コメントセクションには、以下の通知が表示されます。

**Notice**: Trying to access array offset on value of type null in **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** on line **90**
**Notice**: Trying to access array offset on value of type null in **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** on line **106**
**Notice**: Trying to access array offset on value of type null in **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** on line **127**
**Notice**: Trying to access array offset on value of type null in **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** on line **127**
**Notice**: Trying to access array offset on value of type null in **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** on line **148**
**Notice**: Trying to access array offset on value of type null in **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** on line **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

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

上記の直接呼び出しを配置しても、リンクとして何も返ってきません(別のトピックで見つけました)。

Apache / PHP7.4 / WP 6.0.2 を実行しています。
数時間トラブルシューティングしましたが、もう手段がありません。誰か何か手がかりを持っていませんか!?
よろしくお願いします。

Joep

Joepさん、こんにちは。

これら両方のことが真実であれば、あなたのサイトには(WP Discourse以外の)別の問題があることになります。

これは最近始まったことですか?最近、あなたのWPインストールで他に何が変更されましたか?他のプラグイン、テーマ、キャッシュなど。

Angus様、

ご連絡ありがとうございます。これは「新規」の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が構築されるべきコード行に関連する通知と、「Continue the discussion at」の後のリンクが表示されないという問題はまだ残っています。

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

Joep

わかりました。コメントとパーマリンクを独自のカスタムコードで読み込んでいるのはなぜですか?プラグインがこれを処理します。

こんにちは。

「main」WordPressコメント(Bricksのテンプレート要素)を含めると、「Discourse reviews」プラグインに置き換えられていない「通常のWPコメントフォーム」が表示されます。上記のURLをご覧ください。ブログの下にWPコメントを追加してレイアウトを変更しました。

バックエンド設定

そのため、レビューが表示され、おそらくBricksビルダーとの非互換性をすべて上書きするため、コードを手動で追加しました。

Joep

「いいね!」 1

承知いたしました。おそらく、お使いのテンプレートビルダーに何らかのロード優先度の問題があると思われます。明日、再現を試みます。しばらくお待ちください。

テンプレートビルダーを参照用に送信してもよろしいですか?

次のリリース(現在準備中の 2.4.6)で get_discourse_comments ユーティリティ関数にいくつかの更新が適用されます。更新されたユーティリティメソッドのシグネチャは次のようになります。

/**
* コメントテンプレートを読み込まずに表示できるように、DiscourseコメントのHTMLを取得します。
*
* @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 これは、あなたのケース(および他のいくつかのケース)にいくつかの利点をもたらします。

  • コメント表示が機能します
  • プログラムでコメント表示タイプ(すべてのコメントまたはコメントリンク)を制御できます
  • プログラムでコメントキャッシュを制御できます

詳細はこちらをご覧ください。

「いいね!」 1

ありがとうございます!インストールして試してみます。結果を報告します。

まだリリースされていません。WordPressの管理画面でプラグインのバージョン 2.4.6 がアップデート可能になるまでお待ちください(ここでもお知らせします)。

アンガス様

こちらに戻ってきました。基本的に「動作する」ようになりましたが、Bricks Builderのテンプレートではありません。
twentytwentyテーマに切り替えると、Discourseインテグレーションがブログ記事の下に表示され、コメントフィールドが置き換わります。

Bricks Builderを使用している場合、「Comments」という要素があり、WPコメントを読み込みますが、プラグインでは置き換えられません。プログラムで呼び出しても同様です。

プログラムで呼び出すと、次のエラーが発生します。

Error: Too few arguments to function WPDiscourse\Utilities\Utilities::get_discourse_comments(), 1 passed in /home/u43655p432443/domains/domain.nl/public_html/wp-content/themes/bricks/includes/elements/code.php(159) : eval()'d code on line 4 and exactly 4 expected

したがって、Bricks関連の問題です。Bricksコミュニティにも問い合わせてみます。

Joep

今のところ、テンプレートでコメントを呼び出すにはPHPを使用しています。

<?php comments_template(); ?>

これにより、Bricksのコメント要素はスキップされ、コアのWPが使用されます。これは機能します。

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;