wordpress:获取文章里全部或前几张图片的方法详解

 2016-11-29 20:36

最近一直在捣腾wordpress模板,想把本网站的这套主题修改成wordpress的。在制作过程中遇到这样一个问题:如何在wordpress首页调用文章里面的全部图片或者前几张图片呢

寻找到不完整的答案:

在baidu上搜索了下,发现的确有一些相关问题,最简单的回复是在function.php文件里增加下面这个方法:

function XXX_get_post_images($post_content){
  preg_match_all('|<img.*?src=[\'"](.*?)[\'"].*?>|i', do_shortcode($post_content), $matches);
  if($matches){
  return $matches;//自行var_dump($matches)就可以看到效果了。
    }else{
  return false;
  }
}

另外,其他人也提到一个wp_get_attachment()的函数,这里暂不考虑。我们先把上面这段代码弄明白。

方法定义了一个叫$post_content的变量。通过名字我们就知道,这是指“文章的内容”。但这个变量没有定义预设值,所以,这个方法必须有一个变量才能在模板里面使用;

第二行是提取了变量里面包含<img>的内容,并把它做成一个叫$matches的数组,而且还是多纬数组。

最后几行是输出判断:如果变量中包含<img>的内容,就输出数组,没有返回空。

尝试

知道了这个函数的作用后,我们就可以根据这些来尝试了。

刚才我们提到,这个方法里必须要有一个变量,我们想要的是文章的内容,所以用get_the_content()作为变量。因为返回值是字符串,它不能在HTML直接显示,所以,我们要借助echo方法来显示所需内容。直接返回Array是无意义的,我们需要返回的数组对应的值。结合这三点,我们可以得到对应文章的第一张图片:

<?php echo XXX_get_post_images(get_the_content())[0][0];?>
/** 输出内容如下: **/
<img src='...' alt='...'>

如果我们想要知道这个文章里面到底有多少张图片应该怎么办呢?有个数组我们就简单多了,直接用count()来查询就可以了:

<?php echo count(XXX_get_post_images(get_the_content())[0])?>
组合起来

有了这个数组,我们可干的事情就多了。现在,我的主题要获取文章中的前三张图片,并且把它在首页上显示出来。那么就对应的PHP里插入下面这个逻辑:

<?php 
    $arraylength = count(XXX_get_post_images(get_the_content())[0]);
    if($arraylength >=3 ){
 ?>
<a href="..."><?php echo XXX_get_post_images(get_the_content())[0][0] ?></a>
<a href="..."><?php echo XXX_get_post_images(get_the_content())[0][1] ?></a>
<a href="..."><?php echo XXX_get_post_images(get_the_content())[0][2] ?></a>
<?php } ?>


当然,方法是多样的,只要你明白如何运用函数方法就可以做出不同的效果。

作者头像

作者:紫铜炉

自由博主,网页设计师。我关注科技产品和个人博客发展,注重用户体验和界面优化。

 发表评论: