新手使用wpjam_post_thumbnail自动获取缩略图的心得
在用七牛云插件提供的wpjam_post_thumbnail实现Ribbon主题自动获取缩略图一文中记录了我使用WPJAM 七牛镜像存储插件提供的wpjam_post_thumbnail自动获取文章的缩略图的相关代码,但实现过程其实还是比较曲折的,在这里分享一下我的一点点心得,希望可以帮助到和我一样的新手。
再声明一下:我完全不懂wordpress插件的工作原理,我只是从一个初学者的角度来分享我的学习心得,若有错误,还请各位海涵。
1. 七牛云插件作者Denis提供缩略图使用方法
Denis的原话是这样的:至于上面代码放到什么地方,我只能说你主题原来the_post_thumbnail()函数是在放到哪里,这个函数就放到哪里。
2.新手对插件作者提供方法的理解
我直接搜索我的主题中所有the_post_thumbnail()所在,然后将作者提供的代码放在该函数并列的位置,即两个函数并存。于是出现了下面的效果。上面一篇文章只有一个缩略图,因为我手动移除了原有的缩略图,而下面一篇文章有两个缩略图。
所以应该是用Denis提供的函数替代主题中的函数the_post_thumbnail()。从上图中可以看出,Denis提供的代码得到的缩略图的位置与原主题中缩略图的位置不完全一样,为了不去重新修改css文件,我对Denis的代码做了一些小小的改动,具体实现代码参考用七牛云插件提供的wpjam_post_thumbnail实现Ribbon主题自动获取缩略图。
3.wpjam_has_post_thumbnail() & wpjam_post_thumbnail()
在修改index.php/archieve.php时比较顺利,基本上套用Denis的代码就可以,不过在修改widget-tabs.php时遇到了一些困难。在widget-tabs.php中,原代码与Denis提供的代码格式相差太远了,我根本不知道该如何套用,原代码是这样的:
1 2 3 |
<?php if(has_post_thumbnail()): ?> <?php $image = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'recent_post_thumb'); ?> <a href='<?php the_permalink(); ?>'><img src="<?php echo $image[0]; ?>" alt="<?php the_title(); ?>" width='65' height='50' class="wp-post-image" /></a> |
所以我去学习了七牛镜像存储的源代码,先看wpjam_has_post_thumbnail():
1 2 3 |
function wpjam_has_post_thumbnail(){ return wpjam_get_post_thumbnail_uri()?true:false; } |
然后在看函数wpjam_post_thumbnail,它的函数调用关系如下图:
可见函数wpjam_has_post_thumbnail()和wpjam_post_thumbnail()最终都调用了函数wpjam_get_post_thumbnail_uri。经过查阅相关资料,我对该函数做了如下注释,若有错误之处,还请指出。
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 28 29 30 |
function wpjam_get_post_thumbnail_uri($post=null){ $post = get_post($post);//get_post的$post参数默认值为null,设为默认值时获取当前post if(!$post) return false; $post_id = $post->ID; //调用缩略图缓存,若无缓存或者已经过期,wp_cache_get() 会返回 false;否则直接调用缓存数据 $post_thumbnail_uri = wp_cache_get($post_id,'post_thumbnail_uri'); if($post_thumbnail_uri === false){//当前无缩略图缓存或缓存已过期 if(has_post_thumbnail($post_id)){//当前post已设置缩略图 $post_thumbnail_uri = wp_get_attachment_url(get_post_meta($post_id,'_thumbnail_id',true)); }elseif($post_thumbnail_uri = apply_filters('wpjam_pre_post_thumbnail_uri',false, $post)){//获取标签缩略图 // do nothing }elseif($first_img = get_post_first_image(do_shortcode($post->post_content))){//获取文章中的第一张图片 $pre = apply_filters('pre_qiniu_remote',false,$first_img); $img_type = strtolower(pathinfo($first_img, PATHINFO_EXTENSION)); if($pre == false && wpjam_qiniutek_get_setting('remote') && get_option('permalink_structure') && strpos($first_img, LOCAL_HOST)===false && strpos($first_img, CDN_HOST) === false){ $img_type = ($img_type == 'png')?$img_type:'jpg'; $first_img = CDN_HOST.'/qiniu/'.$post_id.'/image/'.md5($first_img).'.'.$img_type; } $post_thumbnail_uri = $first_img; }elseif($post_thumbnail_uri = apply_filters('wpjam_post_thumbnail_uri',false, $post)){//获取分类缩略图 //do nothing }else{ //这里应该是获取“七牛镜像存储设置-->缩略图设置-->默认缩略图” $post_thumbnail_uri = wpjam_get_default_thumbnail_uri(); } //将当前获取的缩略图写入缓存,缓存6000秒 wp_cache_set($post_id, $post_thumbnail_uri, 'post_thumbnail_uri', 6000); } return $post_thumbnail_uri; } |
1 |
return '<img src="'.$post_thumbnail_src.'" alt="'.the_title_attribute(array('echo'=>false)).'" class="'.$class.'"'.$hwstring.' />'; |
1 |
<a href='<?php the_permalink(); ?>'> <?php wpjam_post_thumbnail(array(65,50), $crop=1);?></a> |
博主的自言自语:这也是我当时折腾了好久才弄明白的,所以这篇也上侧边栏吧!
希望可以让遇到类似困难的朋友少走弯路..
顶下