web-dev-qa-db-ja.com

リスト項目でoEmbedを使用する

WordPressには oEmbed機能 があることを私は知っています。しかし、埋め込むコンテンツは、次のように独自の行に配置する必要があります。

Lorem Ipsum

http://www.youtube.com/link/to/content

More Lorem Ipsum

残念ながら、私のマークアップはこのように見えますのでoEmbedは機能せず、私はプラグインを使わなければなりません。

<ul>
    <li>http://www.youtube.com/link/to/content</li>
    <li>http://www.youtube.com/link/to/content</li>
</ul>

私はこのプラグインがなくても動作するようになることができるとにかくありますか? functions.phpの一行か二行はこのプラグインより良いでしょう。

1
BFTrick

商品の周りに[embed]のショートコードを使うだけです。

<ul>
    <li>[embed]http://www.youtube.com/link/to/content[/embed]</li>
...
3
Otto

WP_Embedクラスによる特別なフィルタリングが少しあります。これは、スタンドアロンリンクを埋め込みのターゲットにします。

/**
 * Passes any unlinked URLs that are on their own line to {@link WP_Embed::shortcode()} for potential embedding.
 *
 * @uses WP_Embed::autoembed_callback()
 *
 * @param string $content The content to be searched.
 * @return string Potentially modified $content.
 */
function autoembed( $content ) {
    return preg_replace_callback( '|^\s*(https?://[^\s"]+)\s*$|im', array( $this, 'autoembed_callback' ), $content );
}

私たちがその論理を取り、あなたのユースケースのために正規表現を調整するならば:

add_filter( 'the_content', 'autoembed_list_items', 8 );

function autoembed_list_items( $content ) {

    global $wp_embed;

    return preg_replace_callback( '|<li>(https?://[^\s"]+)</li>|im', array( $wp_embed, 'autoembed_callback' ), $content );
}
2
Rarst