我正在尝试向执行以下操作的 wordpress 站点添加一些功能...
- 检查第一个图像或第一个 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 视频拇指的逻辑可以稍后出现,现在我只有带有图像或嵌入 youtube 的帖子。任何人都可以帮助将两者结合起来吗?
*编辑*
在使用 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 视频的所有不同方式