5.3 アップデートでのブロック変更に関連していると思われます。詳細は以下の投稿をご覧ください:In Conversation with Anna Morgan - Discussions - Nature Photographers Network
参考までに、CDN 画像用の以下のスニペットも使用しています。
add_filter( 'wp_discourse_excerpt', 'wpdc_custom_excerpt' );
function wpdc_custom_excerpt( $content ) {
return apply_filters( 'as3cf_filter_post_local_to_s3', $content );
}
ダッシュボードでも同じエラーが発生しており、これはおそらく WordPress プラグインに起因するものだと確信しています。
WP Discourse plug in being odd - #10 by adamprocter という投稿を見つけましたが、私はバージョン 1.9.7 を使用しており、公開ユーザー名は有効なアカウントです。
simon
2019 年 11 月 18 日午後 4:22
5
本日、この件について調査いたします。私のサイトでは、WordPress から公開された画像は、Discourse がリモート画像のダウンロードを試みるまでは正しく表示されています。ダウンロードが実行されると、ご投稿にあるようなマークアップが残ってしまいます。

これが WordPress 5.3 の変更に関連しているかどうかは現時点では不明です。
「We detected an API request using a deprecated authentication method(非推奨の認証方式を使用した API リクエストを検出しました)」という警告が表示されている場合、それは画像に関する問題の原因ではありません。WP Discourse のバージョン 1.9.6 以降では、その警告は発生しないはずです。プラグインからのすべての API リクエストは、現在はヘッダーベースの認証を使用しています。
simon
2019 年 11 月 18 日午後 11:15
6
問題は、Discourse のアップロード用 Markdown が HTML タグで囲まれている場合、その Markdown がパースされないように見える点にあるようです。例えば、WordPress の投稿に対して Discourse の PullHotlinkedImages ジョブを実行した後、以下のような表示が確認されます。
<small>Originally published at: https://scossar.com/figure-tags-cause-issues/
</small><br>
<figure class="wp-block-image"></figure>
投稿を編集して Markdown リンクを囲んでいる HTML タグを削除すると問題は解決しますが、これに対する適切な解決策を見出す必要があります。
すみませんが、この件はSimonが担当されていますか、それとも誰か割り当てられていますか?
simon
2019 年 11 月 26 日午後 4:12
8
この問題は、画像を含む投稿が Discourse に公開された際、投稿の HTML が当初以下のような形式になることが原因です。
<figure><img src="https://example.com/wp-content/uploads/your-image.png" /></figure>
Discourse で「リモート画像をローカルにダウンロードする」というサイト設定が有効になっている場合、Discourse が WordPress から投稿をダウンロードした際に画像リンクが破損してしまいます。この問題は、リモート URL を持つ画像タグが HTML タグで囲まれている場合に常に発生します。
この問題に対する最も簡単な解決策は、「リモート画像をローカルにダウンロードする」サイト設定を無効にするか、WordPress から Discourse へ投稿の全文を公開しないようにすることです。
将来的には、WP Discourse プラグインが「全文を公開する」オプションを削除する可能性があります。WordPress から Discourse へ投稿の全文を公開すると、複数の問題が発生する可能性があります。これらの問題のほとんどは、WordPress から Discourse へ抜粋を公開し、Discourse 上で「全文を表示」ボタンを使って投稿全体を表示することで解決できるはずです。このアプローチがあなたのケースにも適用できるでしょうか?
もう一つの可能性として、WordPress 投稿を公開するために使用されるテンプレートをカスタマイズする方法があります。投稿から画像を抽出し、投稿の抜粋と一緒に公開します。カスタムテンプレートを使用することで、画像の HTML を Discourse の Markdown プロセッサと競合しないように構成できます。
シモン、ありがとうございます。リモート画像をローカルにダウンロード が現時点での簡単な解決策でした。『投稿全文を公開』が廃止されるかもしれないという話を聞いて、がっかりしています。私の現在の使い方は、WordPress に投稿を公開すると、それが Discourse の記事セクションに公開されるという流れです。デフォルトでは全員が最初の投稿を「ウォッチ」するように設定されています。これにより、全員が記事の全文を含むメールを受け取ることができます。そして最も素晴らしいのは、メールに返信するだけでコメントを追加できる点です。もしサイトを訪れるという追加の手間を強いると、特に画像がない短い抜粋だけでは、ほとんどの人が記事を読まないでしょう。画像は当サイトにとって非常に重要です。もし『投稿全文を公開』が廃止された場合、WordPress をやめて、記事を直接 Discourse に公開することを検討するかもしれません。これは SEO などの点では理想的ではありませんが、エンゲージメントの方が重要だと考えています。
Canapin
(Coin-coin le Canapin)
2020 年 3 月 18 日午前 12:19
10
完全な公開機能も欠かせません。
ここで提案されている内容が 100% 理解できていません…
画像をどのように抽出するのでしょうか?正規表現を使うのでしょうか?
画像タグを適切な Markdown 構文に置換する正規表現を想像できます。それはあなたが意図していることで、それは機能するでしょうか?
simon
2020 年 3 月 18 日午前 2:22
11
いいえ。過去にそのような試みをしていたら、そうしようとしたかもしれません。この Stack Overflow の投稿がその問題をある程度説明しています:https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454。
プラグインが投稿コンテンツの基本的な HTML バージョンを組み立てるのがどの程度難しいか調べてみます。最後の手段として、DOMDocument のメソッドを使ってコンテンツを解析する方法もあります。Discourse から返されるコメントはこれらのメソッドで解析されており、それに関する問題報告は受けていません。
抜粋を公開し、Discourse の「完全な投稿を表示」ボタンをクリックしてユーザーが全文を表示できるようにするのが、おそらく最良の解決策だと思いますが、WP Discourse プラグインから「完全な投稿を公開」オプションを削除するのはためらわれます。
Canapin
(Coin-coin le Canapin)
2020 年 3 月 22 日午後 5:10
12
ご説明いただき、ありがとうございます。
投稿者に記事を投稿し、「更新」ボタンをクリックするよう依頼します。WP で記事を投稿してから更新すると、Discourse 上の画像が常に正しく表示されるからです。
投稿者に記事ごとに 1 秒余計に時間をかけてもらうとしても、公開オプション全体が消えてしまうよりはマシですからね
simon
2020 年 3 月 22 日午後 5:20
13
Discourse の「リモート画像をローカルにダウンロードする」というサイト設定が有効になっている場合、投稿が更新されてから数分以内に画像が再び消えてしまわないでしょうか?もしそうではないのであれば、なぜそれが問題を解決するのか調査します。
Canapin
(Coin-coin le Canapin)
2020 年 3 月 22 日午後 5:30
14
この設定を有効にしていますが、数日〜数週間経過した最新の投稿でも画像は正しく表示されています。画像の問題に遭遇した例として、1 ヶ月前の投稿 こちら をご覧ください。
また、Discourse 側の画像 URL を確認したところ、WordPress からのリンクのままとなっており、画像が Discourse にダウンロードされていないことがわかりました。これは、サイトとフォーラムが同じドメインを共有していることが原因なのでしょうか?
(サイト:https://monocycle.info 、フォーラム:https://forum.monocycle/info)
Discourseスレッドを更新しても、画像の代わりに巨大な破損したサムネイルが表示されたままです。投稿を編集すると、以下が < > 内に表示されます。
img src="http://mysite.com/wp-content/uploads/2020/03/asha2.jpg" class="ss-hidden-pin-image" alt="Blog" data-pin-url="" data-pin-media="http://mysite.com/wp-content/uploads/2020/03/asha2.jpg" data-pin-description=""/
Stephen
(Stephen)
2020 年 5 月 7 日午後 4:26
16
あなたの WordPress サイトは http ですか、それとも https ですか?
現在は http ですが、https についても検討しています。
Stephen
(Stephen)
2020 年 5 月 7 日午後 8:18
18
ページが HTTPS の場合、ブラウザは安全でないソースからのコンテンツを読み込みません。
画像の読み込みに HTML 要素に依存している場合、メインサイトが HTTPS を使用するようになるまで機能しません。
simon
2020 年 5 月 16 日午前 1:07
19
WordPress プラグインリポジトリに WP Discourse バージョン 2.0.2 をプッシュしました。このアップデートにより、ブロックエディターを使用して投稿を Discourse に公開する際に発生していた画像の破損の問題が修正されます。
画像、画像ギャラリー、さらに YouTube や Vimeo の動画も、投稿から抽出され、Discourse が処理できる形式でフォーマットされるようになりました。アップデート後に問題が発生した場合はお知らせください。Discourse 上で正しくレンダリングされない WordPress ブロックがまだある場合は、ご報告ください。ブロックは現在、名前でパースできるようになったため、あらゆる問題の解決が可能になるはずです。
来週、プラグインでは対応が難しい非常に特殊なブロックをパースするためにフックできるフィルターを追加する予定です。
Canapin
(Coin-coin le Canapin)
2020 年 5 月 16 日午前 9:48
20
アップデート後にいくつかの問題が発生しています。
WP では「クラシックエディター」(TinyMCE)を使用しています。
古い記事には [video] ショートコード内に動画 URL が含まれており、最近の記事(3 年未満)では、動画 URL を [arve] ショートコード内に格納する ARVE 動画埋め込みプラグインを使用していました。
そこで、WP の投稿を Discourse にフィルタリングするために以下のようにしました:
$excerpt = preg_replace('/\[arve .*url="(.*?)" .*\/\]/is',"\n$1\n", $excerpt);
$excerpt = preg_replace('/\[video .*mp4="(.*)"\]\[\/video\]/is',"\n$1\n", $excerpt);
これは完璧に機能しており、動画 URL のみが Discourse に渡され、Discourse 上で埋め込まれて表示されていました。
しかし、WP-Discourse のアップデート以降、動画が Discourse 上に表示されなくなりました。
また、tinymce でショートコードなしに YouTube URL を単純に貼り付けてみることも試みました(WP には YouTube 動画を埋め込むためにショートコードが必要ないことを知りました…あるいは他のプラグインやテーマの影響かもしれませんね? でも、それは重要ではないと思いますが)、preg_replace 関数を削除しても、動画は Discourse 上に表示されません。
WP 上の私のテキスト(WYSIWYG タブではなくプレーンテキスト):
https://www.youtube.com/watch?v=e6MCkspqtxo
[arve url="https://www.youtube.com/watch?v=e6MCkspqtxo" /]
WP 上での表示:
Discourse 上の投稿:
Discourse 投稿の HTML コード:
<p>Test vidéooo:</p>
<div data-mode="normal" data-provider="youtube">
<div></div>
</div>
<div data-mode="normal" data-provider="youtube">
<div></div>
</div>
編集:また、WP で記事が非公開の場合、記事を編集しても Discourse に同期されないことに気づきました。プライベートでテストをしたい時には少し面倒です。
simon
2020 年 5 月 16 日午後 4:16
21
それは奇妙ですね。今回の変更は、クラシックエディタで公開された投稿には影響しないことを意図していました。この問題を再現してみます。エディタの「テキスト」タブで投稿を開いた際に表示されるマークアップを共有していただけませんか?
Canapin
(Coin-coin le Canapin)
2020 年 5 月 16 日午後 5:09
22
WP プラグイン ARVE を使用した場合
<p>Test vidéooo:</p>
<div class="arve-wrapper aligncenter" data-mode="normal" data-provider="youtube" id="arve-e6MCkspqtxo-3" style="max-width:800px;" itemscope itemtype="http://schema.org/VideoObject">
<div class="arve-embed-container" style="padding-bottom:56.250000%"><iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen class="arve-iframe fitvidsignore" frameborder="0" name sandbox="allow-scripts allow-same-origin allow-presentation allow-popups allow-popups-to-escape-sandbox" scrolling="no" src="https://www.youtube-nocookie.com/embed/e6MCkspqtxo?iv_load_policy=3&modestbranding=1&rel=0&autohide=1&playsinline=1&autoplay=0" width="480" height="270"></iframe></div>
</div>
<div class="arve-wrapper aligncenter" data-mode="normal" data-provider="youtube" id="arve-e6MCkspqtxo-4" style="max-width:800px;" itemscope itemtype="http://schema.org/VideoObject"><div class="arve-embed-container" style="padding-bottom:56.250000%"><iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen class="arve-iframe fitvidsignore" frameborder="0" name sandbox="allow-scripts allow-same-origin allow-presentation allow-popups allow-popups-to-escape-sandbox" scrolling="no" src="https://www.youtube-nocookie.com/embed/e6MCkspqtxo?iv_load_policy=3&modestbranding=1&rel=0&autohide=1&playsinline=1&autoplay=0" width="480" height="270"></iframe></div></div>
プラグインなしで、WP に単に以下のように記述した場合:
https://www.youtube.com/watch?v=e6MCkspqtxo
Discourse エディタは次の結果を表示します:
<p>Test vidéooo:</p>
<div class="fitvids-video"><iframe title="Volkor X - Enclave" width="800" height="450" src="https://www.youtube.com/embed/e6MCkspqtxo?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div>
どうやら WP は、ネイティブではない別のライブラリ(おそらくテーマ由来のもの)を使用しているようです
問題はむしろ私の側にあるのでしょうが、アップデート前は正常に動作していました…