web-dev-qa-db-ja.com

wp_embed_register_handlerが機能しない

私はこのリンクの例を試してみました https://codex.wordpress.org/Function_Reference/wp_embed_register_handler しかしうまくいきませんでした。これは私の全体のコードです:

add_action('init', function() {
    wp_embed_register_handler( 'forbes', '#http://(?:www|video)\.forbes\.com/(?:video/embed/embed\.html|embedvideo/)\?show=([\d]+)&format=frame&height=([\d]+)&width=([\d]+)&video=(.+?)($|&)#i', 'wp_embed_handler_forbes' );
});

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

$embed = sprintf(
        '<iframe src="http://www.forbes.com/video/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" scrolling="no" marginwidth="0" marginheight="0"></iframe>',
        esc_attr($matches[1]),
        esc_attr($matches[2]),
        esc_attr($matches[3]),
        esc_attr($matches[4])
        );

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

なぜこれがうまくいかないのですか?

3
kmligue

コーデックスから投稿した例を修正しました。

/**
 * Embed support for Forbes videos
 *
 * Usage Example:
 *
 *     http://www.forbes.com/video/5049647995001/
 */
add_action( 'init', function()
{
    wp_embed_register_handler( 
        'forbes', 
        '#http://www\.forbes\.com/video/([\d]+)/?#i', 
        'wp_embed_handler_forbes' 
    );

} );

function wp_embed_handler_forbes( $matches, $attr, $url, $rawattr )
{
    $embed = sprintf(
        '<iframe class="forbes-video" src="https://players.brightcove.net/2097119709001/598f142b-5fda-4057-8ece-b03c43222b3f_default/index.html?videoId=%1$s" width="600" height="400" frameborder="0" scrolling="no"></iframe>',
        esc_attr( $matches[1] ) 
     );

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

現在のiframeは固定のheightwidthを持っています。

うまくいけばあなたのニーズに合わせて調整することができます。テーマの$content_widthを使用するか、貼り付けたビデオのURLから直接高さ/幅の情報を渡します。

更新: Codexページに 警告を追加しました より良い例が投稿されるまで。

2
birgire