从post_meta而不是post_content中捕获第一个图像

时间:2016-08-12 13:41:40

标签: wordpress custom-fields

这是一篇关于此https://css-tricks.com/snippets/wordpress/get-the-first-image-from-a-post/

的好文章

但在文章中解释了如何从内容中捕获第一张图片

$output = preg_match_all('https://cdn.css-tricks.com/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);

有没有办法检查自定义字段而不是内容?

因为我不使用the_content();但是我正在使用

$photo_gallery = get_post_meta($post->ID,'my_custom_field', true);
echo $photo_gallery

所以我的问题是如何捕捉$ photo_gallery中的第一张图片

下面是一个尝试,但没有工作

function catch_that_image() {
   global $post;
   $first_img = '';
   ob_start();
   ob_end_clean();
   $custom_content = get_post_meta($post->ID,'my_custom_field', false);
   $output = preg_match_all('/[\w\-]+\.(jpg|png|gif|jpeg)/', $custom_content, $matches);
   $first_img = $matches[1][0];

   if(empty($first_img)) {
        $first_img = get_template_directory_uri() . '/css/images/noimage.png';
   }

   return $first_img;
 } 

我将preg_match更改为/[\w\-]+\.(jpg|png|gif|jpeg)/,因为我在自定义内容中将图片作为网址,但我看到了noimage.png。仍然没有工作

我应该使用全局$ wpdb而不是全局$ post吗?

2 个答案:

答案 0 :(得分:0)

据我所知,您有多个图像存储为自定义字段(post meta),名称为“my_custom_field”,对吗?

$photo_gallery = get_post_meta($post->ID,'my_custom_field', true);

true表示返回输入的最后一个值。如果您将其更改为false,您将获得所有图像,这样您就可以获得第一个图像:

$photo_gallery = get_post_meta($post->ID,'my_custom_field', false);
$first_photo = $photo_gallery[0];

答案 1 :(得分:0)

您是否尝试使用$photo_gallery进行更改, 在

$output = preg_match_all('https://yourdomain.com/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $photo_gallery, $matches);

您可以调试print_r($photo_gallery);,看看您的$photo_gallery是否是您想要的内容。