WordPress教程

WordPress 定制短代码简码实现商品倒计时功能

阿里云

前两天在一个商城项目中,客户希望页面上出现一个活动倒计时的效果,为了方便调用,我想到利用短代码+参数实现任意调用。实现效果是这样的:

功能比较简单,首先参数必须完整,年月日时分秒一个都不能少,并且在一个页面上还只能出现一个倒计时,限制比较大。于是我在此基础上整理了下代码,完善了一下功能。

首先是 PHP 部分,以下代码加入主题的 function.php

也想出现在这里?联系我们
创客主机
  1. function Brain_countdown($atts, $content=null) {
  2. 	extract(shortcode_atts(array("time" => ''), $atts));
  3. 	extract(shortcode_atts(array("prefix" => ''), $atts));
  4. 	date_default_timezone_set('PRC');
  5. 	$endtime=strtotime($time);
  6. 	$nowtime=time();
  7. 	$counttime=$endtime-$nowtime;
  8. 	$day=floor($counttime/(60*60*24));
  9. 	$day=$day<10 ? "0".$day : $day;
  10. 	$hour=floor(($counttime-$day*24*60*60)/3600);
  11. 	$hour=$hour<10 ? "0".$hour : $hour;
  12. 	$min=floor(($counttime-$day*24*60*60-$hour*3600)/60);
  13. 	$min=$min<10 ? "0".$min : $min;
  14. 	$sect=floor($counttime-$day*24*60*60-$hour*3600-$min*60-1);
  15. 	$sect=$sect<10 ? "0".$sect : $sect;
  16. 	$endtimes = str_replace(array("-"," ",":"),",",$time);
  17. 	if($endtime>$nowtime){
  18. 		return '
  19. 		<div class="countDownCont">团购时限:
  20. 		<span style="left:10px;" id="'.$prefix.'_countDown_day">'.$day.'</span>天
  21. 		<span style="left:125px;" id="'.$prefix.'_countDown_hour">'.$hour.'</span>时
  22. 		<span style="left:232px;" id="'.$prefix.'_countDown_min">'.$min.'</span>分
  23. 		<span style="left:342px;" id="'.$prefix.'_countDown_sec">'.$sect.'</span>秒
  24. 		</div>
  25.  
  26. 		<script>window.setInterval(function(){ShowCountDown("'.$prefix.'" , '.$endtimes.' );}, 1000);</script>
  27. 		';
  28. 	}else{
  29. 		return $content;
  30. 	}
  31. }
  32.  
  33. add_shortcode('countdown', 'Brain_countdown');
  34. wp_register_script( 'Brain_countdown_head_JS', get_template_directory_uri() . '/js/countdownjs.js', array(), '1.0', false );
  35. wp_enqueue_script( 'Brain_countdown_head_JS' );

然后是 JS 部分,将下面代码另存为 countdownjs.js 文件,并上传到主题 js 文件夹里:

  1. function ShowCountDown(prefix,year,month,day,hourd,minuted,seconded){
  2. 	var now = new Date();
  3. 	if( typeof(hourd) == "undefined" ) hourd=23;
  4. 	if( typeof(minuted) == "undefined" ) minuted=59;
  5. 	if( typeof(seconded) == "undefined" ) seconded=59;
  6. 	var endDate = new Date(year, month-1, day, hourd, minuted,seconded);
  7. 	var leftTime=endDate.getTime()-now.getTime();
  8. 	var leftsecond = parseInt(leftTime/1000);
  9. 	var day=Math.floor(leftsecond/(60*60*24));
  10. 	day = day < 0 ? 0 : day;
  11. 	var hour=Math.floor((leftsecond-day*24*60*60)/3600);
  12. 	hour = hour < 0 ? 0 : hour;
  13. 	var minute=Math.floor((leftsecond-day*24*60*60-hour*3600)/60);
  14. 	minute = minute < 0 ? 0 : minute;
  15. 	var second=Math.floor(leftsecond-day*24*60*60-hour*3600-minute*60);
  16. 	second = second < 0 ? 0 : second;
  17. 	//var day2 = (day<10?"0"+day:day);
  18. 	var hour2 = (hour<10?"0"+hour:hour);
  19. 	var minute2 = (minute<10?"0"+minute:minute);
  20. 	var second2 = (second<10?"0"+second:second);
  21.  
  22. 	jQuery("#"+prefix+"_countDown_day").html(day);
  23. 	jQuery("#"+prefix+"_countDown_hour").html(hour2);
  24. 	jQuery("#"+prefix+"_countDown_min").html(minute2);
  25. 	jQuery("#"+prefix+"_countDown_sec").html(second2);
  26.  
  27. }

调用方法

  1. [countdown time='2016-7-10 20:30:30' prefix='pro1']活动已结束[/countdown]
  2. [countdown time='2016-7-19' prefix='pro2']活动已结束[/countdown]

其中参数 prefix 允许在同一个页面调用多个不同的短代码,只要每个的 prefix 不同即可

标签内部的“活动已结束”可以改成任何文本或 HTML 代码

如果在 time 参数中把时分秒省略,会默认时分秒为 23:59:59,也就是当天最后一秒,这对一些只需精确到天的倒计时还是比较有用的

也可以用 do_shortcode 在主题模板上直接调用:

  1. echo do_shortcode("[countdown time='2016-7-10 20:30:30' prefix='pro1']活动已结束[/countdown]");

CSS 部分就因人而异,不贴出来了。

WordPress 定制短代码简码实现商品倒计时功能

已有 254 人购买
查看演示升级 VIP立刻购买

收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!