web-dev-qa-db-ja.com

Oembedでサポートされていない新しい埋め込みハンドラを追加する方法

私はobededサポートを提供していないWebサイトからビデオを埋め込むことを検討していますが、 wp_embed_register_handler() についてwp codexで提供されている参照は私のような人には広すぎるすぎます。

私は私のテーマfunctions.phpにサンプルコードをアップロードしようとしました、それは私がYouTubeのようなoembedサポートされたウェブサイトのようにちょうどURLからのどんなフォーブズビデオも埋め込むと思いましたが、投稿にリンクを出力するだけです。

(注:すべてのリンクは私の低い担当者のために編集されています。)

私の場合は、myvi.ruというWebサイトのサポートを追加しようとしています。 URLだけを投稿に貼り付けて、自動的に埋め込みiframeコードを出力させます。

たとえば、

http:/www.myvi.ru/watch/Krishtianu-Ronaldu-na-ploschadi-Madrida_I8fWfbDia0ufHwP7W85ZBg2?ap=1

///に引き下げる

これを投稿にします。代わりに実際の埋め込みコードを取得する必要があります。

iframe width="640" height="390" src="/myvi.ru/player/embed/html/o7wvdeXPclZHaazh9Rum_ZuqOtTxR2_ntg5OVhDEhxabugy0qLQDKTbQ0SRijDi8N0" frameborder="0" allowfullscreen></iframe

<>を取り出しました

次のテーマをfunction.phpに追加することで解決できると思いましたが、運は悪くありません。

wp_embed_register_handler( 'myvi', '#http://(?:www)\.myvi\.ru/(?:video/embed/embed\.html|embedvideo/)\?show=([\d]+)&format=frame&height=([\d]+)&width=([\d]+)&video=(.+?)($|&)#i', 'wp_embed_handler_myvi' );

function wp_embed_handler_myvi( $matches, $attr, $url, $rawattr ) {

    $embed = sprintf(
            '<iframe src="http:/www.myvi.ru/embed/embed.html?show=%1$s&format=frame&height=%2$s&width=%3$s&video=%4$s&mode=render" width="%3$spx" height="%2$spx" frameborder="0" allowfullscreen></iframe>',
            esc_attr($matches[1]),
            esc_attr($matches[2]),
            esc_attr($matches[3]),
            esc_attr($matches[4])
            );

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

誰かが私を正しい方向に向けてください。他の例からグーグルで学ぶことを試みましたが、見つけることができず、動けなくなりました。私は大いに役立つことができるどんな情報へのどんなアドバイスまたはリンクでも感謝するでしょう。ありがとうございます。

3
musasi

カスタム埋め込みハンドラを登録する

あなたのケースで wp_embed_register_handler() 関数を使うことができる方法の一例です:

/**
 * Register an embed handler for myvi videos
 */
add_action( 'init', function()
{
    wp_embed_register_handler( 
        'myvi', 
        '#http://www\.myvi\.ru/watch/([a-zA-Z0-9_-]+)$#i',   // <-- Adjust this to your needs!
        'myvi_embed_handler' 
    );
} );

ここでは、GETパラメータをサポートしない方法で正規表現を作成しました。そのため、これをテストするときには、URLから?api=1部分を削除する必要があります。それ以外の場合は、必要に応じて正規表現を調整するだけです。

カスタムコールバックハンドラは次のように定義されています。

/**
 * Handler callback for the myvi video provider
 */
function myvi_embed_handler( $matches, $attr, $url, $rawattr )
{
    $embed = sprintf(
        '<iframe src="http://myvi.ru/player/embed/html/%1$s" width="600" height="400" frameborder="0" allowfullscreen></iframe>',
        esc_attr( $matches[1] )
    );
    return apply_filters( 'myvi_embed_handler', $embed, $matches, $attr, $url, $rawattr );
}

ここでは、必要なすべての埋め込み情報がビデオリンクに含まれていると想定しています。

これがエディタでどのように機能するかです:

testing myvi 

あなたはあなたのサイトに対してのみこれをすべきです 本当に信頼します

3
birgire