2

div class="video-container" 内のすべての iframe をラップする次の関数があります。

src="www.youtube で始まる src を含む iframe のみをターゲットにしたい

この関数をより具体的に変更する方法はありますか?

前もって感謝します。

function div_wrapper($content) {
// match any iframes
$pattern = '~<iframe.*</iframe>~';
preg_match_all($pattern, $content, $matches);

foreach ($matches[0] as $match) {
    // wrap matched iframe with div
    $wrappedframe = '<div class="video-container">' . $match . '</div>';

    //replace original iframe with new in content
    $content = str_replace($match, $wrappedframe, $content);
}

return $content;    
}
add_filter('the_content', 'div_wrapper');
4

2 に答える 2

0

$pattern変数を変更するだけでよいと思います。試してみてください:

$pattern = '~<iframe.*src*=\'.*(http\:?)*\/\/*(www\.?)*youtube\..*</iframe>~';

注: @alexが指摘したように、プロトコルが欠落しているためhttp://youtube.//youtube.またはhttp://www.youtube.

于 2013-02-06T06:20:19.937 に答える
0

遅延一致 ( *?) を実行し、探している文字列がその中に存在するかどうかを確認します。

// match any iframes
$pattern = '~<iframe.*?</iframe>~';
$content = preg_replace_callback($pattern, function($matches){

  if(strpos($matches[0], 'youtube') !== false) 
    return '<div class="video-container">' . $matches[0] . '</div>';

  return $matches[0];

}, $content);

言うまでもなく、これは多くの場合失敗します。信頼できるものが必要な場合は、XML パーサーを使用します (および を参照DomDocument::getElementsByTagNameしてくださいDomElement::getAttribute

:beforeまたはのような疑似セレクターを使用して iframe のスタイルを設定することもできます:after。そうすれば、ラッパー要素は必要ありません (例: iframe[src~=youtube]:after)

于 2013-02-06T06:13:59.357 に答える