小冬SEO

wordpress调用图集功能开发

2019-06-05 5:07:59 3526 WordPress笔记

wordpress调用图集功,我也在网上查了很多教程,发现还是会有一些问题,于是找朋友开发了一个图集函数,函数如下:

在functions函数中添加如下代码:

//图集
//正则匹配获取img标签src内容-多个
function get_imgAllSrc($tag) {
    // print_r($tag);die;
    // preg_match_all('/(id|alt|title|src)=("[^"]*")/i', $tag, $matches);
    preg_match_all('/(src)=("[^"]*")/i', $tag, $matches);
    $ret = array();
    foreach($matches[0] as $i => $v) {
        $ret[] = trim($matches[2][$i],'"');
    }
    return $ret;
}
//图集调用限制条数
function each_gallery_url($max) {
    global $post, $posts;
    ob_start();
    ob_end_clean();
    $content = $post->post_content;
    $gallery = get_post_gallery_images();
    $gallery_all = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $content, $matche_all);
    $gallery_old = preg_match_all('/<li><img.+src=[\'"]([^\'"]+)[\'"].*><\/li>/i', $content, $matche_old);
    $gallery_filter = preg_match_all('/<figure class="wp-block-gallery.*><\/figure>/i', $content, $matche_filter);
    $gallery_all_first = $matche_all[1][0];
    $gallery_old_array = $matche_old[1];
    $gallery_new_string = implode($matche_filter[0]);  //获取gallery内所有标签并转为string类型
    $list_img_src = get_imgAllSrc($gallery_new_string);  //content内匹配到的所有图片src
    // $max = 5;//限制调用最大条数
    if(count($list_img_src)>1){
        //如果画廊图片大于1则匹配图片src(优先兼容新版画廊)
        // foreach ($list_img_src as $url) {
        //     echo '<li style="background:url('.$url.') center center /cover;" src="'.$url.'"></li>';
        // }
        $imglen = count($list_img_src);
        if($imglen>=$max){
            for($i=0;$i<$max;$i++){
                echo '<li style="background:url('.$list_img_src[$i].') center center /cover;" src="'.$list_img_src[$i].'"></li>';
            }
        }else{
            for($i=0;$i<$imglen;$i++){
                echo '<li style="background:url('.$list_img_src[$i].') center center /cover;" src="'.$list_img_src[$i].'"></li>';
            }
        }
    }elseif($gallery_old_array){
        //如果是li内的img(兼容老版)
        // foreach ($gallery_old_array as $val){
        //     echo '<li style="background:url('.$val.') center center /cover;" src="'.$val.'"></li>';
        // };
        if(empty($gallery_old_array)) echo '<li style="background:url('.$gallery_all_first.') center center /cover;" src="'.$gallery_all_first.'"></li>';
        $imglen = count($gallery_old_array);
        if($imglen>=$max){
            for($i=0;$i<$max;$i++){
                echo '<li style="background:url('.$gallery_old_array[$i].') center center /cover;" src="'.$gallery_old_array[$i].'"></li>';
            }
        }else{
            for($i=0;$i<$imglen;$i++){
                echo '<li style="background:url('.$gallery_old_array[$i].') center center /cover;" src="'.$gallery_old_array[$i].'"></li>';
            }
        }
    }else{
        //未匹配到旧版/新版规则即使用内容第一张图作为画廊默认图(若内容无图片则使用$defaultPic默认图片)
        // $defaultPic = bloginfo('template_url'). "/images/default.jpg";
        if(count($gallery_all_first)<=0) echo '<li use="default_image" style="background:url(/images/default.jpg) center center /cover;" src="/images/default.jpg"></li>';
        else echo '<li use="first_image" style="background:url('.$gallery_all_first.') center center /cover;" src="'.$gallery_all_first.'"></li>';
    };
    // return $gallery_html;
    /*调用代码<?php echo each_gallery_url(4); ?>*/
}

调用代码如下:

<?php echo each_gallery_url(4); ?>

说明:此图集调用代码和函数是获取文档中<li>标签内的<img>或者是获取《画廊》中的图片,同时可以限制最大获取数量。

版权保护: 本文由小冬SEO编辑发布,转载请保留链接: http://www.cdseoyh.cn/shuo/124.html

小冬SEO 草根seoer,从事搜索引擎关键词优化,喜欢学习专研各类SEO优化技巧—小冬SEO博客
  • 138文章总数
  • 3527本页访问
  • 运营时间
  • 标签

    友情链接

      {dede:sql sql="select url,webname from dede_flink where typeid = (select id from dede_flinktype where typename=~typename~)"}
    • [field:webname/]
    • {/dede:sql}