web-dev-qa-db-ja.com

hTMLファイルを埋め込むためのwp_embed_register_handler

私は新しいWordpress Webサイトを作成しています。これには、ビデオのような他のメディアに加えて、何千ものオンライン本や読む記事が含まれます。

何万ページものテキストを貼り付けてデータベースを肥大化させたくないので、本の章をhtmlとして作成し、それらのhtmlファイルをWordpressの投稿に埋め込みたいと思います。これによりデータベースのサイズが大幅に削減されると思います。

テスト用のHTMLファイル here をアップロードしました。ファイルはブラウザで読み取ることができるので、ファイルにエラーはありません。

Gutenbergの最新版をインストールし、このURLをEmbed URLブロックに埋め込もうとしましたが、Embedをクリックすると、次のメッセージが表示されます。Sorry, we could not embed that content.

私は このStackExchangeの質問(質問#238330) 、および このもう1つのStackExchangeの質問(質問#277163) _の回答に従いましたが、幸運でした。

question#238330 answer でコードを使用したとき、GutenbergとデフォルトのWordPressポストエディタを使用して、forbes.comからのビデオをうまく埋め込むことができました。

しかし、私が自分のウェブサイトから読むようにコードを変更したとき、何も起こりません(すなわち、URLが記事の中のテキストの行として表示されます)。

これが私が修正したコードです。

    /**
 * Embed support for Coptic Treasures Texts
 *
 * Usage Example:
 *
 *     https://coptic-treasures.com/html-test-filed/02.html
 */
add_action( 'init', function()
{
    wp_embed_register_handler( 
        'coptic-treasures', 
        '#http://www\.coptic-treasures\.com/?#i', 
        'wp_embed_handler_coptic_treasures' 
    );

} );

function wp_embed_handler_coptic_treasures( $matches, $attr, $url, $rawattr )
{
    $embed = sprintf(
        '<iframe class="coptic-treasures-texts" src="https://coptic-treasures.com/html-test-filed/%1$s.html" width="600" height="400" frameborder="0" scrolling="no"></iframe>',
        esc_attr( $matches[1] ) 
     );

    return apply_filters( 'embed_coptic_treasures', $embed, $matches, $attr, $url, $rawattr );
}

私の質問は次のとおりです。

1-変更されたコードのエラーについて教えてください。

2 - 私はiFrameなしで埋め込むことができますか?私のウェブサイトは即応性があり、テキストをページ内でシームレスにして、Googleが見つけられるようにしたいです。

私は以前に必要な結果を達成するプラグインを試しましたが、1つのURLが間違っている場合、すべてのサーバーリソースを消費することにつながるコードにエラーがあったのでそれを使わないことになりました。それはまたメンテナンスされていないプラグインでした。

前もって感謝します。

_編集_

私はコードを少し修正しました、そしてそれは今彼にテキストを埋め込んでいます、しかし、私はまだコードの問題に直面しています。

問題は、私がこのURLを埋め込むことです:https://coptic-treasures.com/html-test-filed/02.html、私はこのコードを使用する必要がありますhttps://coptic-treasures.com/02.html

これは、この部分html-test-filed/が私が使用している関数に追加されているからです。変数に置き換えようとしましたが、うまくいきませんでした。

埋め込みファイルのURLを変更できるようにしたいのですが。

ありがとう。

/**
 * Embed support for Coptic Treasures Texts
 *
 * Usage Example:
 *
 *     https://coptic-treasures.com/html-test-filed/02.html
 */
add_action( 'init', function()
{
    wp_embed_register_handler( 
        'coptic-treasures', 
        '#https://coptic-treasures.com/([a-z0-9_-]+)\.html$#i', 
        'wp_embed_handler_coptic_treasures' 
    );

} );

function wp_embed_handler_coptic_treasures( $matches, $attr, $url, $rawattr )
{
    $embed = sprintf(
        '<iframe class="coptic-treasures-texts" src="https://coptic-treasures.com/html-test-filed/%1$s.html" width="1200" height="1200" frameborder="0" scrolling="no"></iframe>',
        esc_attr( $matches[1] ) 
     );

    return apply_filters( 'embed_coptic_treasures', $embed, $matches, $attr, $url, $rawattr );
}
2
Atef Wagih

正規表現パターンを修正する

タイプのURLと一致させるには:

https://coptic-treasures.com/
{Some string with a mix of a-z letters and hyphen}/{Some number}.html

この例のように:

https://coptic-treasures.com/html-test-filed/02.html

あなたはこの種のパターンを試すことができます:

'#https://coptic-treasures.com/([a-z-]+)/([0-9]+)\.html$#i'

そして、それに応じてiframe出力を更新する必要があります。

... src="https://coptic-treasures.com/%1$s/%2$s.html" ...

対応する一致.

デモ

これがテスト実行です。

text 

それは生成します:

embed 

いくつかのメモ

私が覚えている限りでは、埋め込みがポストメタデータを書くので、あなたのアプローチはデータベースの動作を避けません。

しかし、多くのWordPressのインストールには大きな問題もなく何万もの階層化されていないカスタム投稿があるので、私はそのオプションを除外しません。最新のPHPバージョンなどを提供する優れたホスティングプロバイダがあることを確認してください。検索が遅くなりすぎる場合は、サードパーティのソリューションやサービスを利用できるようにしてください。

親ドロップダウンがすべてのページを取得するので、それが非常に多くの階層的なポストを持っているWordPress管理インターフェースに関する問題であるかもしれないことに注意してください。

毎回対応するベアファイルを見つけて開き、そのように修正するよりも、WordPressバックエンドのデータを編集する(リビジョンや分類法などを利用する)ほうがはるかに簡単です。それが別のシステムからエクスポートされない限り、あなたはその場にいます。

他のアプローチとしては、例えば、 Vue/React/... JSと純粋なデータをjson(p)リソースとして取得し、必要に応じてフォーマットしますが、その場合の検索エンジンの可視性についてはよくわかりません。

2
birgire