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

有一次接到一个项目,客户要求:如果一篇文章中存在多幅图片,要能把这些图片在当前文章页面制作成一个图片集。

仔细分析这个要求,前端设计无悬念,无非就是如何获取当前文章中所有图片的 src 值的问题。

联想到几乎每个网站都必备的获取文章首张图片的那个函数: function catch_that_image()   (前文已有相关描述:也谈WordPress获取文章中首张图片),在这个函数中,仅仅使用了首张图片,而那里获得的 $matches 是一个二维数组啊。

先将该变量dump出来看一下,插入:

var_dump($matches);

输出如下(图片url前面部分已为保护隐私作者已删除):

array(2) {
  [0]=>
  array(3) {
    [0]=>
    string(171) "<img src="...2015101200004.jpg"/>
    [1]=>
    string(192) "<img src="...2912928349248.jpg"/>
    [2]=>
    string(201) "<img src="...awief98aw7faw.jpg"/>
  }
  [1]=>
  array(3) {
    [0]=>
    string(64) "...2015101200004.jpg"
    [1]=>
    string(124) "...2912928349248.jpg"
    [2]=>
    string(133) "...awief98aw7faw.jpg"
  }
}

可见,我们需要的正是 $matches[1],不是它的第一个,而是全部!

由于已经有了function catch_that_image()函数,因此不必再写一个新函数了。将这个函数改一改,增加一个参数调用并针对调用参数判断进行返回即可:

 1 function catch_that_image($picnum=0) {
 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
 8   $first_img = ‘‘;
 9   if(empty($matches[1])) $first_img = "/default.jpg";
10   else $first_img = $matches [1][0];
11   if ($picnum>0) return $matches[1];
12   else return $first_img;
13 }

前端调用时采用如:<?php $all_pic=catch_that_image(2);?>即可将包含所有图片的数组赋给数组变量 $all_pic,如果只需要调用首张图片时仍如原来<?php echo catch_that_image();?>。

前端处理逻辑复制如下(在 single.php中合适的位置):

<?php /*本过程处理本文章图片集*/
    $all_pic=catch_that_image(2);//用参数2调用函数,返回值存入数组
    if (count($all_pic)>1) {    //文章图片数大于1才显示图片集
        echo ‘<div class="single_pic">‘;
        echo ‘<div class="pic_header">本文精彩图集</div>‘;
        echo ‘<div class="focusBox_single" style="margin:0 auto">‘;
        echo ‘<ul class="pic">‘;
        foreach ($all_pic as $pics=>$pic) {
            echo ‘<li><img src="‘.$pic.‘"></li>‘;
        }
        echo ‘</ul>‘;
        echo ‘<a class="prev" href="javascript:void(0)"></a>‘;
        echo ‘<a class="next" href="javascript:void(0)"></a>‘;
        echo ‘<ul class="hd_single">‘;
        for ($picnum=1;$picnum<=count($all_pic);$picnum++){
            echo ‘<li></li>‘;
        }
        echo ‘</ul>‘;
        echo ‘</div></div>‘;
        echo ‘<script type="text/javascript">‘;
        /*鼠标移过,左右按钮显示*/
        echo ‘jQuery(".focusBox_single").hover(function(){ jQuery(this).find(".prev,.next").stop(true,true).fadeTo("show",0.2) },function(){ jQuery(this).find(".prev,.next").fadeOut() });‘;
        /*SuperSlide图片切换*/
        echo ‘jQuery(".focusBox_single").slide({ mainCell:".pic",effect:"fold", autoPlay:false, delayTime:3000, trigger:"click"});‘;
        echo ‘</script>‘;
    }
?>
时间: 2024-11-06 22:38:46

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

也谈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'

再谈javascript 获取服务器控件值的

从网上搜索了好多资料,折腾了半天,终于搞定,记下来供大家参考 这个是网上找到的 <script language="javascript"> function getvalue() { var b = document.all.rbtid.length var a = document.getElementById("rbtid").rows.length; //alert(b);结果为5 //alert(a);结果为4 //for(var i=0;i&

WordPress 后台文章列表设置文章特色图片(缩略图)集成版

functions.php添加以下代码 /** * WordPress 后台文章列表设置文章特色图片(缩略图)集成版 * Plugin Name: Easy Thumbnail Switcher */ class doocii_Easy_Thumbnail_Switcher { public $add_new_str; public $change_str; public $remove_str; public $upload_title; public $upload_add; public

再谈javascript图片预加载技术

图片预加载技术的典型应用: 如lightbox方式展现照片,无疑需要提前获得大图的尺寸,这样才能居中定位,由于javascript无法获取img文件头数据,必须等待其加载完毕后才能获取真实的大小然后展示出来,所以lightbox显示的图片的速度体验要比直接输出的差很多,而本文说提到的预加载技术主要针对获取图片尺寸. 一段典型的使用预加载获取图片大小的例子: var imgLoad = function (url, callback) {    var img = new Image();   

再谈获取网站图标Icon

上一篇文章讨论了一下获取网站图标方法,是通过从根目录直接获取和html解析结合的方式来获取的,并给出了相应的代码示例.这一篇来讨论一个更现成的方法,这个方法是从360导航的页面发现的,在导航页面中点击添加网址,会弹出一个添加网址的对话框,点击126邮箱,可以看到126邮箱和图标就跑到上面去了.查看一下网络监控,可以看到Request URL是http://cdn.website.h.qhimg.com/index.php?domain=www.126.com,Request Method是GET

让WordPress不同的分类目录的文章调用不同的模板

近日,因为网站建设的需要,在没有使用自定义文章类型的情况下,使用不同的分类目录里的文章调用不同的模板,作为注册wordpress大学的见面礼. 首先在function.php里,添加如下代码: //获取并输入某个分类的子分类 function post_is_in_descendant_category( $cats, $_post = null ) { foreach ( (array) $cats as $cat ) { // get_term_children() accepts inte

wordpress中强大的调用文章函数query posts 用法

query posts是一个非常好用的调用文章函数,可以做到同页面内显示多种特定范围的文章,例如可以调用某分类.标签.日期及作者等不同范围的文章列表.这些文 章列表可以极大的丰富 wordpress 页面的内容,并有利于SEO.二手科学家整理了下query posts调用文章的函数,下面分别说明下. 首先是query posts 的一般写法.通常是如先定义查询再加入文章回圈程式码后再重置查询. <?php  //定义要显示的文章范围查询  query_posts();  //文章回圈  if (

Python爬虫新手教程: 知乎文章图片爬取器

1. 知乎文章图片爬取器之二博客背景 昨天写了知乎文章图片爬取器的一部分代码,针对知乎问题的答案json进行了数据抓取,博客中出现了部分写死的内容,今天把那部分信息调整完毕,并且将图片下载完善到代码中去. 首先,需要获取任意知乎的问题,只需要你输入问题的ID,就可以获取相关的页面信息,比如最重要的合计有多少人回答问题.问题ID为如下标红数字 编写代码,下面的代码用来检测用户输入的是否是正确的ID,并且通过拼接URL去获取该问题下面合计有多少答案. import requests import r

get_posts()函数wordpress调用指定ID文章多篇文章

wordpress内置函数get_posts()用于调用指定的一篇或多篇文章,函数提供多个参数,可以设置调用文章的指定分类.自定义字段.文章类型.文章状态.显示顺序等条件,文章以数组的形式返回,通过循环语句输出即可. 代码结构: 1 <?php get_posts($args);?> 返回数组型的变量,$args是该函数必要的变量 变量$args参数: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27