次のことを行うワードプレスサイトにいくつかの機能を追加しようとしています...
- 最初の画像または最初の YouTube 埋め込みの投稿をチェックします
- 最初に画像が見つかった場合は、それを返します
- YouTube の埋め込みが最初に見つかった場合は、スクリーンショットを返します。
オンラインで同様の例をいくつか見つけましたが、法案に適合するものは何もありません。これまでに使用しているものは次のとおりです...
function catch_that_image() {
global $post, $posts;
$first_img = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
$first_img = $matches [1] [0];
if(empty($first_img)){ //Defines a default image
$first_img = "/images/default.jpg";
}
return $first_img;
}
これは正しく機能し、投稿の最初の画像を正しく返します。現在、YouTube の機能を追加するのに苦労しています。オンラインで次のコード スニペットを見つけましたが、上記の関数に追加する方法がわかりません。
preg_match( '#https?://www\.youtube(?:\-nocookie)?\.com/embed/([A-Za-z0-9\-_]+)#', $markup, $matches );
}
// If we've found a YouTube video ID, create the thumbnail URL
if ( isset( $matches[1] ) ) {
$youtube_thumbnail = 'http://img.youtube.com/vi/' . $matches[1] . '/0.jpg';
}
投稿に両方がある場合に、画像の上にある YouTube ビデオのサムを選択するロジックは、後で来る可能性があります。2つを組み合わせるのを手伝ってくれる人はいますか?
*編集*
hakresの優れた例と回答を使用した後、これを使用しています...
function catch_image($content, $defaultImage = '/images/default.jpg')
{
$image = $defaultImage;
$found = strlen($content);
foreach (array(
'image' => array(
'regex' => '/<img.+src=[\'"]([^\'"]+)[\'"].*>/i',
'mask' => '%s'
),
'youtube' => array(
'regex' => '#(?:https?(?:a|vh?)?://)?(?:www\.)? youtube(?:\-nocookie)?\.com/watch\?.*v=([A-Za-z0-9\-_]+)#',
'mask' => 'http://img.youtube.com/vi/%s/2.jpg'
),
) as $search)
{
extract($search);
if (preg_match($regex, $content, $matches, PREG_OFFSET_CAPTURE)
&& $matches[1][1] < $found
) {
list($image, $found) = $matches[1];
$image = sprintf($mask, $image);
}
}
return $image;
}
YouTubeの正規表現ステートメントを少し変更し、画像を表示するためのマスクも変更しましたが、すべてが機能しています。
ただし、これらも試して追加する必要があります....
'regex' => '#<object[^>]+>.+?https?://www\.youtube(?:\-nocookie)?\.com/[ve]/([A-Za-z0-9\-_]+).+?</object>#s',
'regex' => '#https?://www\.youtube(?:\-nocookie)?\.com/[ve]/([A-Za-z0-9\-_]+)#',
'regex' => '#https?://www\.youtube(?:\-nocookie)?\.com/embed/([A-Za-z0-9\-_]+)#',
'regex' => '#(?:https?(?:a|vh?)?://)?(?:www\.)?youtube(?:\-nocookie)?\.com/watch\?.*v=([A-Za-z0-9\-_]+)#',
'regex' => '#(?:https?(?:a|vh?)?://)?youtu\.be/([A-Za-z0-9\-_]+)#',
これにより、YouTube ビデオを埋め込むさまざまな方法がすべてカバーされます。