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

从第一次接触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 }
时间: 2024-08-07 09:46:39

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

再谈WordPress获取文章图片——制作文章图片集

有一次接到一个项目,客户要求:如果一篇文章中存在多幅图片,要能把这些图片在当前文章页面制作成一个图片集. 仔细分析这个要求,前端设计无悬念,无非就是如何获取当前文章中所有图片的 src 值的问题. 联想到几乎每个网站都必备的获取文章首张图片的那个函数: function catch_that_image()   (前文已有相关描述:也谈WordPress获取文章中首张图片),在这个函数中,仅仅使用了首张图片,而那里获得的 $matches 是一个二维数组啊. 先将该变量dump出来看一下,插入:

PHP正则获取文章中第一张图片为封面

话不多说直接上代码 1 $pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg|\.png]))[\'|\"].*?[\/]?>/"; 2 preg_match_all($pattern,$data['content'],$matchContent); 3 if(isset($matchContent[1][0])){ 4 $data['cover']=$matchContent[1][0]; 5 }

ASP.NET/C#获取文章中图片的地址

前几天修改一个网站的布局的时候需要把简单的新闻列表修改为图文结合+新闻列表,不过这新闻的数据库非常简单,图片是在编辑器里面和HTML一起存入数据库中的content字段的,所以工作简化到从一个字符串里面获取图片的地址并输出.在HTML的图片标签一般如下格式所示:<img src="" alt="" title="" width="" height="" />,这就相当于编程中的一个结构体啊,里面

dedecms获取文章中的图片代码

1.在 /include/common.func.php 文件底部加入以下代码 /** * getArcImages 获取文章中的图片 * $id 文章ID * $num 要获取的图片数量 默认为4张 */ function getArcImages($id,$num=4){ global $dsql; $row = $dsql->GetOne("SELECT * FROM dede_addonarticle WHERE aid= $id"); $content = $row['

wordpress获取文章特色图像路径函数wp_get_attachment_image_src()

特色图像是wordpress主要的文章缩略图功能,几乎全部wordpress模板都使用或支持特色图像.今天介绍的wp_get_attachment_image_src()函数就是获取文章特色图像路径的wordpress函数,通过该函数可以返回一个包含图片路径.宽度和高度的有序数组. 函数结构: <?php wp_get_attachment_image_src( $attachment_id, $size, $icon ); ?> 返回值: Array ( [0] => url //图片

解决WordPress在文章中插入图片时默认插入中等格式图片的问题

如题所示,我使用的是WordPress自带的编辑器进行编辑,而且为了保护版权开始给自己的图片添加文字水印.本来每次上传的时候都可以通过插件自动地给图片添加上水印,但是比较恶心的是把图片插入到文章中之后自动生成了一个中等尺寸的图片,而这个新的小图片是没有水印的.解决这个问题也很简单,只需要在后台的"设置" –> "多媒体"里进行简单的设置就可以了 如上图所示,只需要把媒体选项里的所有选项都设置成0就可以了

获取文章中的关键字

最近在做关于搜索方面的程序,查阅了许多资料,写下了下面的代码,已做后备 jar包下载地址:http://download.csdn.net/detail/zwdsmileface/8678353 import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import j

获取文章中图片路径的正则表达式

String content = "<p><img src="http://xxx.com/image/635.png" alt="bg" style="max-width:100%;"><img src="http://ssss.com/image/d17c.jpg" alt="spe-03" style="max-width: 100%;"&g

wordpress获取文章所属分类

1.获取全部分类 <?php foreach((get_the_category()) as $category){ echo $category->cat_name; } ?> 2.获取第一个分类 <?php $category = get_the_category(); echo $category[0]->cat_name; ?> 原文地址:https://www.cnblogs.com/Mrrabbit/p/8283974.html