wordpress提取文章缩略图的多功能函数

介绍了一种利用timthumb.php插件从指定文章ID中提取图片并生成缩略图的方法,支持自定义缩略图尺寸、CSS类、图片数量及起始位置等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能

指定文章ID提取出文章中的图片,并生成缩略图,利用了timthumb.php插件。

可以自定义缩略图的大小,对原图进行裁剪。

可以自定义图片的CSS类。

可以自定义从第几张开始,提取多少张图片。

可以自定义每张图片的包裹元素,比如<div><li><span>等等。

可以自定义直接输出html代码或着返回html代码方便二次处理。

参数

$id: 文章的ID,当没有传入ID参数的时候,自动获取当前文章的ID,只有在循环中才有效。

$width, $height: 必需。缩略图的宽高属性。

$class: 缩略图的CSS class属性,默认为空。

$num: 提取多少张缩略图,默认提取 1 张,0 为全部提取。

$start: 起点值。从第几张开始提取,默认是第 1 张。

$before, $after: 缩略图的 html 父级元素。

$echo:直接输出代码,还是返回一个 string 。

代码

function get_art_thumb($id, $width, $height, $class='', $num=1, $start=1, $before='', $after='', $echo=1){

    // 传参虽然为1,但序列号是从0开始的,实际使用的时候要减1
    $start = $start - 1;

    // 默认获取当前文章ID
    if ( $id == null ) $id = get_the_ID();

    // 获取文章的正文
    $content = get_post($id) -> post_content;

    // 定义正则。主题图片利用的WP自带的[caption]短代码,所以正则是匹配[caption]的
    $z = '/\[caption.*?\]<a\s+href=".*?"><img.*?src="(.*?)".*?\/><\/a>.*?\[\/caption\]/i';

    // 用正则提取出缩略图,[0]是[caption]到[/caption]的整段代码;[1]是图片的URL
    preg_match_all($z, $content, $thumb, PREG_PATTERN_ORDER);

    // $num 传入参数为0时,提取全部缩略图
    if( $num == 0 ) $num = count( $thumb[1] );

    // 如果起始值不为0,提取数量如果不加上起点值的话,提取的图片数会少
    $num = $num + $start;

    /*
    * 如果有缩略图,提取。
    * 用for循环而不用foreach是为了控制提取数量和起点值更方便
    * 定义 $m 为起点值,$m小于图片总数,并且小于提取数量时,依次提取
    */
    if ( !empty( $thumb[1] ) ){
      for( $m = $start; $m < count( $thumb[1] ) && $m < $num; $m++){
      $html .= $before . '<img class="' . $class . '" src="' . get_template_directory_uri();
      $html .= '/timthumb.php?src=' . $thumb[1][$m];
      $html .= '&h=' . $height . '&w=' . $width . '&q=90&zc=1&ct=1" ';
      $html .= 'alt="' . get_the_title($id) . '" />' . $after;
    }

    /*
    * 如果没有缩略图,使用默认图片
    * get_option( 'post_default_thumbnail' ) 是后台设置中定义的默认图片URL,可以改成任意的图片地址
    */
    } else {
      $html = $before . '<img class="' . $class . '" src="' . get_template_directory_uri();
      $html .= '/timthumb.php?src=' . get_option( 'post_default_thumbnail' );
      $html .= '&h=' . $height . '&w=' . $width . '&q=90&zc=1&ct=1" ';
      $html .= 'alt="' . get_the_title($id) . '" />' . $after;
    }

    // 输出还是返回
    if($echo == 1){
      echo $html;
    }else{
      return $html;
    }

  }

调用

比如当前缩略图的需求是这样:

  1. 调用当前文章图片,生成480 X 360像素的缩略图。
  2. 缩略图CSS class为thumb。
  3. 从第1张开始,全部提取。
  4. 图片包裹器为<div class="thumb-wrap">......</div>。
  5. 直接输出html代码。

在放缩略图的地方输入以下代码即可: 

<?php 
  get_art_thumb('', 480, 360, 'thumb', 0, 1, '<div class="thumb-wrap">', '</div>', 1);
?>

将输出以下形式的html代码:

<div class="thumb-wrap">
  <img class="thumb" src="主题目录/timthumb.php?src=图片地址&h=360&w=480&q=90&zc=1&ct=1" alt="文章标题" />
</div>
<!-- ..........N次直到该文章所有图片被提取 -->

最后,上传timthumb.php到主题根目录下。 

TODO. 传参有些麻烦,默认值也必须传入一个空值,可以改为数组传参。

待续……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值