web-dev-qa-db-ja.com

Wordpressは埋め込まれたURLを表示することを拒否します

Oembedを使って http://domain.com/1121 のようなURLの埋め込み表現を表示するにはWPが必要です。

検出リンクを設定した http://domain.com/1121 があります。

<link href="http://www.domain.com/generator/oembed/?url=http%3A//domain.com/1121" rel="alternate" type="text/xml+oembed" />

WPは埋め込みURLを自動的に検出しなくなったので、この機能を再度有効にするために enable-oembed-discovery プラグインをインストールしました。

私は自分のApacheログを監視し、WPが発見のためにリンクにぶつかることを確認しました - それで私はenable-oembed-discoveryプラグインがうまくいくと思いますが、URLは決して変換されません。

私は自分のカスタムURLをホワイトリスト化するためのプラグインを書いたことさえあります(enable-oembed-discoveryプラグインが自動検出を有効にするはずなので本当に必要ではありませんが、一体何が必要なのでしょう)。

add_action( 'init', 'my_oembed_provider' );

function my_oembed_provider() {
    wp_oembed_add_provider( 'http://domain.com/*', 'http://www.domain.com/generator/oembed/', false);
}

そしてまだ何もない。

APIエンドポイント(http://www.domain.com/generator/oembed/)は、次のXMLを生成するようにハードコードされています。

        <?xml version="1.0" encoding="UTF-8"?>
        <OEmbed>
            <type>rich</type>
            <width>400</width>
            <height>342</height>
            <html><![CDATA[&lt;b&gt;HELLO WORLD FROM OEMBED &lt;/b&gt;]]></html>
        </OEmbed>

APIエンドポイントは、 組み込み仕様 で要求されているとおりに、正しいcontent-typeヘッダー(header("Content-type: text/xml");)を送信します。

投稿を追加したユーザーは管理者権限を持っているためunfiltered_htmlが許可されています

私はアイディアがなくて機知に富んでいます。何が足りないの?

3
Jahufar

仕様に示されているように、あなたのXMLルート要素は 'oEmbed'ではなく 'OEmbed'でした。 XML要素名では、XML仕様に従って大文字と小文字が区別されます。

3
Dougal Campbell

2つのこと

  1. WordPressのoEmbed実装は、JSONを優先して使用します。

  2. XMLを使用するためには、WordPressはPHPのsimplexmlライブラリが利用可能である必要があります。それが利用できない場合、あなたはおそらくあなたが見ている結果を得るでしょう。 XMLを取得していますが、シンプレックスを使用しないと解析できないため、...何も起こりません。

この問題を解決する最善の方法は、XMLの使用をやめることです。代わりにJSONを使用してください。

リンクタイプはapplication/json + oembedになります。

エンドポイントはjsonデータを返します(コンテンツタイプapplication/jsonを使用)。

{
"type":"rich",
"width":"400",
"height":"342",
"html":"&lt;b&gt;HELLO WORLD FROM OEMBED &lt;/b&gt;"
}

物事はそのようにうまく機能する傾向があります。 JSONは、すべてのプロバイダでoEmbedに推奨される形式です。

4
Otto