Home > Network > Program > WordPress自动获取+调用页面主循环日志中的图片

不想看到广告,你可以手动关闭它。给我留个言也可以关闭广告哦。。

close

WordPress自动获取+调用页面主循环日志中的图片

12:54|Categories: Network, Program
close

在做新主页时由于在首页放了一个slideshow循环展示最新日志中的图片。如何让它自动添加图片成了一个问题。要添加图片首先就要从日志中获取图片,这一点上网搜了一下,发现还真不少,不过介绍的都是如何获取图片作为缩略图之类。不过我们可以将代码稍微改造一下。

不得不说,网上资源很丰富,但是很多人都是抄来抄去。我找的这段代码是从一个我之前以为应该说技术很硬的人那里淘来的,但是我发现此人也只是照抄这段代码,根本就没试验,因为这段代码根本就是错误的。正则表达式的书写就不正确,而且好多无关变量。可能我太相信这人了,我一直以为是我自己的错误,后来仔细看了代码,才发现原来正则表达式错误了。这个先放下,我们看代码。

首先是获取日志循环中的图片,我习惯写函数,然后再调用,当然,也可以直接调用这段代码,看自己喜好。

   1: function get_post_excerpt_img() {

   2:         global $post;

   3:         $the_img = '';

   4:         preg_match_all('/<img.+src=/<img.+src=[^>]+>/i', $post->post_excerpt, $matches);

   5:         $the_img = $matches [0] [0];

   6:         if(empty($the_img)){

   7:         return    $the_img=1;    

   8:         }else{

   9:         return '<a href="'.get_permalink().'" title="'.$post->post_title.'">'.$the_img.'</a>';

  10:         }

  11: }

这里我定义了一个get_post_excerpt_img()函数,然后定义全局变量$post,这个其实是WP内置的一个对象了。通过匹配正则表达式来匹配所需图片。这里注意,我用$post->post_excerpt是匹配摘要,因为我摘要里一般都有图片,文章内容却不一定会有。你不习惯写摘要,可以用$post->post_content。匹配结果是存入数组的,所以我们只需取第一张图片即可。然后是条件判断,如果没有获取到图片,变量$the_img=1。这里$the_img只需随便赋个值即可,是为了方便后面调用时判断,当然,不赋值也是可以的。如果成功取得图片,返回结果,包括这篇日志的url,title,你可以根据自己情况自定义格式,比如只输出图片。

既然已经取得了图片,然后就是输出了,在模板的循环部分,找到这段代码

   1: <?php if(have_posts()) : ?><?php while (have_posts()) : the_post(); ?>

在它上方添加:

   1: <?php $num=1; ?>

在它下方添加:

   1: <?php $img[$num++]=get_post_excerpt_img(); ?>

即我们是将循环获取的图片存入一组数组$img中。

然后就是调用了,只需用

   1: <?php echo $img[1]; ?>

即可调用第一张图片。同理 <?php echo $img[2]; ?>即调用第二张图片。

当然,以上情况限于你的日志中一定有图片,一定可以获取到图片。如果你某一篇日志中没有配图,就会无法输出。这时,我们就可以用条件判断,因为在函数中我们定义了没有获取到图片时,就传递给返回变量一个值$the_img=1;所以我们可以用

   1: <?php $num=1;if ($img[$num] !== 1) {echo $img[$num];$num++;}else{$num++;if()...}?>

将这个条件判断循环使用就OK了。如果你真的图片是隔三差五的日志中才有一篇,还是用while条件判断吧。这个意思就是如果函数返回值为不为1,即取得了图片,就输出,然后将$num变量加1;如果函数返回值是1,则先加1,再次判断。依次。。。

注意,因为调用函数是写在页面循环中的,所以数组中存入的图片数量跟你设置的页面显示文章数量有关。如果你设置首页显示10篇文章,就会从10篇文章中获取图片,并存入一个长度为10的数组中。设置显示五篇就是得到长度为5的数组。

OK了,有问题可留言讨论。

 

——By QiQiBoY

声明: 本站遵循 署名-非商业性使用 3.0 共享协议. 转载请注明转自 I’m qiqiboy !
close
Your position: Home >> Network, Program |You can:BackTop |Add Bookmark |BackLastPage

Post Addresses :http://www.qiqiboy.com/2010/01/04/wordpress-get-the-new-post-pictures.html
If you like this post, welcome Subscribe my blog.

22 Responses to “WordPress自动获取+调用页面主循环日志中的图片”

You can leave a response or Trackback this entry .
  1. 秦大少 说:

    赞一个,最不喜欢的就是那些自己没用过就照搬的人,往往误导一大片!

  2. 娱乐博客 说:

    这费了不少心思吧。

  3. hfantasy 说:

    还好我不上你首页,不然指不定死机。记得来我哪里玩玩~

  4. :smile: 不错。。。不过我看不懂。。。过寒假了好好看看PHP JS

  5. evlos 说:

    灰常好的思路,嘿嘿嘿嘿,小邪也最喜欢写函数了 ~
    话说,在函数里mysql_query是不是要把$db = mysql_connect(”,”,”)这个变量 ~
    给 global $db ~
    有没有这个需要?小邪最近有点糊涂 ~

    • QiQiBoY 说:

      @ evlos : mysql_query是个php的sql语句操作函数吧,这个没研究过。不过$db = mysql_connect(”,”,”)是个赋值语句,global $db是对$db的声明,既然$db是个全局变量,之前应该有过定义。如果再次将mysql_connect(”,”,”)赋值给$db。接下来的调用就是复制后的值了。。

  6. A.shun 说:

    强悍的效果

    不过你这应该要考虑下速度了

    圣诞老人原来不是回到主页,而是随机文章- -

  7. 吓我一跳 说:

    这个效果很好,做出来的话应该很帅!

  8. 三七八蛋 说:

    轮播效果很不错啊。

  9. 娱乐博客 说:

    那个右上角字是蓝色不太好。不引人注意

  10. 娱乐博客 说:

    没有想到日志还没有发表居然不能看。

  11. smigoo 说:

    很好 准备试在我的新主题上

  12. 江流 说:

    我没有啥图片可调 暂时不需要了

  13. eRic. 说:

    学习了。
    博主很强啊。
    哈哈

  14. zwwooooo 说:

    暂时还不考虑这个功能,以后需要了再折腾

  15. 这个设置好像针对的是CMS类型的,一般的博客没有什么用处。

Leave a Reply

Hi, I know you have something to tell me. Please leave me a reply.

«

You input 0 characters.