WordPress 获取文章中图片数量
某些主题会显示文章中的图片数量,发现很多人都分享过类似的文章,可是很多代码都是错的,或者都是无效的。
米扑博客结合几个类似功能的代码,经过自己的一翻折腾,居然活生生给弄出来了,不敢独享,特分享给大家:
打开主题下的函数文件 functions.php
vim functions.php
添加如下代码:
/** 获取文章中的图片数量 **/
/**
* 参数flag=0,返回图片数量
* 参数flag=1,返回全部图片src链接
*
* blog.mimvp.com
* 2016.12.25
*/
function post_stat_images($flag){
global $post;
$post_imgs_count = 0;
// post_imgs_count = get_post_meta($post_id, 'post_imgs_count', true);
ob_start();
ob_end_clean();
// $output = preg_match_all('/<img.*(: |\t|\r|\n)src=[\'"](.+)[\'"](:(: |\t|\r|\n)+.*)>/sim', $post->post_content, $matches ,PREG_SET_ORDER);
$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches, PREG_SET_ORDER);
$post_imgs_count = count( $matches );
if($flag==1){
// // 取第一张图片src地址
// $post_imgs_src = $matches [0][1];
// 遍历所有图片src地址
$post_imgs_srcArray = array();
foreach($matches as $match) {
$img_src = $match[1];
array_push($post_imgs_srcArray, $img_src);
}
$post_imgs_src = implode(',',$post_imgs_srcArray);
return $post_imgs_src;
}else{
return $post_imgs_count;
}
}
调用方法:
<?php echo post_stat_images(0); ?> <?php echo post_stat_images(1); ?>
显示效果:
恩,看似图片匹配上了,但是对不对呢?
实际应用中,发现还是有问题的,例如 img 中有换行、特殊符号、转义符、乱码等等
下面是我在米扑博客中,无意中遇到的一个实际问题,访问博客:创业邦——IT界风云人物
正文有一个图片是这样的,一直都匹配不上,即存在多重换行
$content= '<img alt="business-person-of-the-state-it-11" class="alignnone size-full wp-image-17207" src="https://blog.mimvp.com/wp-content/uploads/2010/07/business-person-of-the-state-it-11.png" style=" height:100%; max-height:540px; max-width:868px; " width="100%" srcset="https://blog.mimvp.com/wp-content/uploads/2010/07/business-person-of-the-state-it-11.png 868w, https://blog.mimvp.com/wp-content/uploads/2010/07/business-person-of-the-state-it-11-300x186.png 300w" sizes="(max-width: 868px) 100vw, 868px"> <img alt="business-person-of-the-state-it-22" class="alignnone size-full wp-image-17208" src="https://blog.mimvp.com/wp-content/uploads/2010/07/business-person-of-the-state-it-22.png" style="height:100%; max-height:558px; max-width:868px; " width="100%" srcset="https://blog.mimvp.com/wp-content/uploads/2010/07/business-person-of-the-state-it-22.png 868w, https://blog.mimvp.com/wp-content/uploads/2010/07/business-person-of-the-state-it-22-300x192.png 300w" sizes="(max-width: 868px) 100vw, 868px">';
贴上试过的方案
<?php
/**
* WordPress 获取文章中图片数量
*
* blog.mivmp.com
* 2017.10.25
*/
@$content = '<img alt="business-person-of-the-state-it-11"
class="alignnone size-full wp-image-17207"
src="https://blog.mimvp.com/wp-content/uploads/2010/07/business-person-of-the-state-it-11.png"
style="
height:100%; max-height:540px; max-width:868px; "
width="100%" srcset="https://blog.mimvp.com/wp-content/uploads/2010/07/business-person-of-the-state-it-11.png 868w,
https://blog.mimvp.com/wp-content/uploads/2010/07/business-person-of-the-state-it-11-300x186.png 300w"
sizes="(max-width: 868px) 100vw, 868px">
<img alt="business-person-of-the-state-it-22" class="alignnone size-full wp-image-17208"
src="https://blog.mimvp.com/wp-content/uploads/2010/07/business-person-of-the-state-it-22.png"
style="height:100%; max-height:558px; max-width:868px; " width="100%"
srcset="https://blog.mimvp.com/wp-content/uploads/2010/07/business-person-of-the-state-it-22.png 868w,
https://blog.mimvp.com/wp-content/uploads/2010/07/business-person-of-the-state-it-22-300x192.png 300w"
sizes="(max-width: 868px) 100vw, 868px">';
function post_stat_images($flag, $content){
global $post;
$post_imgs_count = 0;
// post_imgs_count = get_post_meta($post_id, 'post_imgs_count', true);
ob_start();
ob_end_clean();
/*
$output = preg_match_all('/<img.*?(?: |\\t|\\r|\\n)?src=[\'"]?(.+?)[\'"]?(?:(?: |\\t|\\r|\\n)+.*?)?>/sim', $content, $matches, PREG_PATTERN_ORDER);
$output = preg_match_all('/<img.*(: |\\t|\\r|\\n)src=[\'"](.+)[\'"](:(: |\t|\r|\n)+.*)>/sim', $content, $matches ,PREG_PATTERN_ORDER);
$output = preg_match_all('/<img.*(: |\t|\r|\n)src=[\'"](.+)[\'"](:(: |\t|\r|\n)+.*)>/sim', $content, $matches ,PREG_PATTERN_ORDER);
$output = preg_match_all('/<img.*(: |\\t|\\r|\n)src=[\'"](.+)[\'"](:(: |\\t|\\r|\\n)+.*)>/sim',$post->post_content,$matches ,PREG_SET_ORDER);
*/
// $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $content, $matches, PREG_SET_ORDER); // 不支持换行
// $output = preg_match_all('/<img(.+\r*\n*\d*)src=[\'"]([^\'"]+)[\'"].*/i', $content, $matches, PREG_SET_ORDER); // 支持换行, 去掉了img结尾符 >
// 先替换换行符在匹配,结果多个img合并到一行,出人意料的只匹配一个img
// $content = preg_replace("/([\r\n|\n|\t|]+)/", '', $content);
// echo "content : " . $content . "\n\n";
// $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $content, $matches, PREG_SET_ORDER);
$output = preg_match_all('/<img.+/i', $content, $matches, PREG_SET_ORDER); // 最终解决方案,简单粗暴
print_r($matches);
$post_imgs_count = count( $matches );
if($flag==1){
$post_imgs_srcArray = array();
foreach($matches as $match) {
$img_src = $match[1];
array_push($post_imgs_srcArray, $img_src);
}
$post_imgs_src = implode(',',$post_imgs_srcArray);
return $post_imgs_src;
}else{
return $post_imgs_count;
}
}
echo post_stat_images(0, $content);
echo post_stat_images(1, $content);
?>
WordPress获取所有图片的数量
上面的方法是WordPress获取文章中的图片数量,是针对文章,
如果要输出所有文章的图片数量呢,可以通过下面的代码来统计网站里的图片。
function img_count(){
$query_img_args = array(
'post_type' => 'attachment',
'post_mime_type' =>array(
'jpg|jpeg|jpe' => 'image/jpeg',
'gif' => 'image/gif',
'png' => 'image/png',
),
'post_status' => 'inherit',
'posts_per_page' => -1,
);
$query_img = new WP_Query( $query_img_args );
echo $query_img->post_count;
}
添加到functions.php中
<? img_count(); ?>
最后,展示下我的米扑博客管理后台,显示的每篇文章图片数量
实现原理,参考本文和米扑博客之前发表的博客:WordPress 后台文章列表添加自定义列
阅读数量Views 和 百度收录状态,原理其实都一样
认真研究本文和参考推荐,都很容易实现
参考推荐:
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2018-04-04 20:09:52
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!