码迷,mamicode.com
首页 > 其他好文 > 详细

也谈WordPress获取文章中首张图片

时间:2015-10-31 01:35:11      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:

从第一次接触WordPress开始,在前台首页需要调用文章中的图片以实现在首页显示图片文章,就看到网络上流传甚广的一个函数:

 

 1 function catch_that_image() {
 2    global $post, $posts;
 3    $first_img = ‘‘;
 4    ob_start();
 5    ob_end_clean();
 6    $output = preg_match_all(‘/<img.+src=[\‘"]([^\‘"]+)[\‘"].*>/i‘, $post->post_content, $matches); 
 7    $first_img = $matches [1][0];
 8  
 9    if(empty($first_img)){
10    $first_img = "/default.jpg";
11    }
12  return $first_img;
13 }

 

毫无疑问,这个函数是可以正常工作的。但是你知道这个函数会抛出错误吗?当文章没有图片,并且PHP和WordPress开启调试模式时会抛出一个错误:”Undefined offset: 0 in ……“

作为一个要求完美的人,当然不希望自己的代码中有任何错误,因此简单分析解决之。

分析一下这个函数,出错的原因在于文章没有图片时 $matches 将是个空的数组,而

$first_img = $matches[1][0];

这一句将一个空数组的某个元素赋值给另一个变量,当然就出现错误了。由于PHP并不总是以抛出错误来解决问题,因此在出错后 $first_img 并没有被赋值,因此后面的代码都没有问题。

明白了这一点,解决起来就很简单了,直接去判断数组 $matches 是否为空即可。

我是这样处理的:

$first_img = ‘‘;
if(empty($matches[1])) $first_img = "/default.jpg";
else $first_img = $matches [1][0];
return $first_img;

也就是,在不明确 $matches是否为空的情况下,不急于去为 $first_img 赋值。后面的 if 直接去判断 $matches[1]是否为空。

这样就避免了一个潜在的错误。

完整的修改方案如下:

 1 //获取文章的第一张图片地址
 2 function catch_that_image() {
 3   global $post, $posts;
 4   $first_img = ‘‘;
 5   ob_start();
 6   ob_end_clean();
 7   $output = preg_match_all(‘/<img.+src=[\‘"]([^\‘"]+)[\‘"].*>/i‘, $post->post_content, $matches); 
 8 
 9   $first_img = ‘‘;
10   if(empty($matches[1])) $first_img = "/default.jpg";
11   else $first_img = $matches [1][0];
12   return $matches[1];
13 }

 

也谈WordPress获取文章中首张图片

标签:

原文地址:http://www.cnblogs.com/ztkdv/p/4924708.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!