テーマ内にYouTube動画をショートコードで埋め込みたい。 他のショートコードと同じように、

do_shortcode( '[embed]' . $video_url . '[/embed]' );

とやっても動かない。 どうやら WP_Embed というクラスで the_content にフィルターをかけているらしい。

add_filter( 'the_content', array( $this, 'run_shortcode' ), 8 );

そして run_shortcode() のなかで embed というショートコードが作成される。

add_shortcode( 'embed', array( $this, 'shortcode' ) );

つまり、 run_shortcode() を実行しないと はショートコードとして認識してくれない。

global $wp_embed;
$video_url = 'YouTubeのURL';
echo $wp_embed->run_shortcode( '[embed]' . $video_url . '[/embed]' );

それか、ショートコードを作成すればいいので、

global $wp_embed;
$video_url = 'YouTubeのURL';
add_shortcode( 'embed', array ( $wp_embed, 'shortcode' ) );
do_shortcode( '[embed]' . $video_url . '[/embed]' );