web-dev-qa-db-ja.com

Do_ShortcodeがEmbedに対して機能しない

Youtubeビデオをもっと組織的に埋め込むためにカスタムフィールドタイプを使用しようとしていますが、Do_Shortcode()を使用しても完全に機能するようですが、

<?php echo do_shortcode('[embed]http://www.youtube.com/watch?v=K0M09Ws8vpc&feature=player_embedded[/embed]'); ?>

うまくいかないようですが、同じsingle.phpファイルではこれは完全にうまくいきます。

<?php echo do_shortcode('[gallery link="file" size="thumbnail" icontag="div"]'); ?>

私はそれらをテストするために次々にそれらを置きました、なぜ[embed]ショートコードが解析されないのかという考え(それはただ何も表示しません)

私が投稿に直接ショートコードを埋め込んだ場合、それは完璧に機能します。

ありがとう、

ヨルダン

6
Jordash

簡単に言えば[embed]は通常のショートコードではありません。ほとんどの場合それは何もしません。投稿コンテンツがthe_contentフィルタを通過するとどうなりますか。

  1. [emded]は現在何もしないように登録されています(__return_false()

  2. WP_Embed->run_shortcode()フィルターは低い8優先順位で実行されます

  3. すべてのショートコードは無効になっています
  4. [embed]WP_Embed->shortocde()に登録されています
  5. do_shortcode()はコンテンツに対して実行されます(残りは無効になっているため、埋め込みのみを行います)。
  6. ショートコードは元の状態に復元され、[embed]は役に立たなくなりました。

なので、試してみることにしましょう。

global $wp_embed;

echo $wp_embed->run_shortcode('[embed]whatever[/embed]');

ただし、キャッシングも含まれています(埋め込み結果は投稿のカスタムフィールドに保存されます。そうしないと、毎回HTTPリクエストを送信する必要があります)。通常は動作します。それでもそうかもしれません。

13
Rarst

あなたのコードはうまくいくはずです、おそらくtracチケットのためのアイデアです。

それまでの間、試すことができます。

global $wp_embed;
$post_embed = $wp_embed->run_shortcode('[embed]http://www.youtube.com/watch?v=K0M09Ws8vpc&feature=player_embedded[/embed]');
echo $post_embed;
3
Wyck
   $video_url = get_post_meta($post_id, 'video_url',true);
    //or
    $video_url .= 'video url';
    $check_embeds=$GLOBALS['wp_embed']->run_shortcode( '[embed]'. $video_url .'[/embed]' );
    echo $check_embeds;
0
Jung Rozal