博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
也谈WordPress获取文章首张图片
阅读量:6539 次
发布时间:2019-06-24

本文共 1363 字,大约阅读时间需要 4 分钟。

从第一次接触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('/
/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 将是个空的数组,而第7行:

$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]是否为空。

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

完整的修改方案如下:

//获取文章的第一张图片地址function catch_that_image() {   global $post, $posts;   $first_img = '';   ob_start();   ob_end_clean();   $output = preg_match_all('/
/i', $post->post_content, $matches); $first_img = ''; if(empty($matches[1])) $first_img = "/default.jpg"; else $first_img = $matches [1][0]; return $matches[1]; }

 

转载于:https://www.cnblogs.com/ztkdv/p/4924708.html

你可能感兴趣的文章
从 JavaScript 到 TypeScript
查看>>
Linux常用的服务器构建
查看>>
深入了解 Weex
查看>>
Zeppelin Prefix not found.
查看>>
linux 的网络设置
查看>>
首届“欧亚杯”象翻棋全国团体邀请赛圆满收评!
查看>>
编译tomcat
查看>>
oracle-xe手工创建数据库
查看>>
我的友情链接
查看>>
UG中卸载被占用的DLL
查看>>
eclipse 设置注释模板详解,与导入模板方法介绍总结
查看>>
Cocos2d-x3.2 文字显示
查看>>
mongodb group
查看>>
session_start()放置位置的不正确引发的ROOT常量 未定义的错误
查看>>
如何设定VDP同时备份的任务数?
查看>>
ipsec的***在企业网中的经典应用
查看>>
过来人谈《去360还是留在百度?》
查看>>
mysql备份工具innobackupex,xtrabackup-2.1安装,参数详解
查看>>
本地Office Project计划表同步到SharePoint2013任务列表的权限问题
查看>>
Windows2008 R2 GAC权限问题
查看>>