我们很多WordPress网站右侧或者头部可能会有广告位,这样可以通过广告位获得一定的收入,而这个广告的位置如果是固定的那么可能就无法获得同样的关注度.
这种情况我们可以通过php代码实现广告随机排序:
在后端排序好再输出页面. 将广告节点用数组存放, 对数组进行随机排序, 再输出经过排序的数组. 参考代码 (PHP) 如下:
记得文件后缀要是php.
需要注意的是如果使用了WordPress缓存插件的话,可能会因为缓存导致无法生效,需要采用下面的JavaScript代码.
<?php // WordPress通过php代码实现广告随机排序 // 原文链接: https://www.wpyi.com/guanggao-suiji.html // 用数组存放广告列表 $ads = array('<a href="#"><img src="ad-125x125.png" alt="广告 1" width="125" height="125" /></a>' ,'<a href="#"><img src="ad-125x125.png" alt="广告 2" width="125" height="125" /></a>' ,'<a href="#"><img src="ad-125x125.png" alt="广告 3" width="125" height="125" /></a>' ,'<a href="#"><img src="ad-125x125.png" alt="广告 4" width="125" height="125" /></a>' ); // 对数组进行随机排序 shuffle($ads); // 输出经过排序的数组 $html = ''; foreach ($ads as $ad) { $html .= $ad; } echo $html; ?>
本方法需要 广告代码文件ads.txt 与ads.logip记录文件
<?php #########随机广告显示########## function myads(){ $dir="ads"; #设置存放记录的目录 //$dir="ads"; #设置存放记录的目录 $ads="$dir/ads.txt"; #设置广告代码文件 $log ="$dir/ads.log"; #设置ip记录文件 $ads_lines=file($ads); $lines=count($ads_lines);#文件总行数 ####读出广告总数$ads_count和显示次数到数组$display_array######## $ads_count=0; $display_count=0; for ($i=0;$i<$lines;$i++){ if((!strcmp(substr($ads_lines[$i],0,7),"display"))){ $ads_count+=1; $display_array[$ads_count]=substr($ads_lines[$i],8); $display_count+=$display_array[$ads_count]; } } ####决定随机显示序号$display_rand##### srand((double)microtime()*1000000); $display_rand = rand(1,$display_count); ###决定广告序号$ads_num###### $pricount=0; $ads_num=1; for($i=1; $i<=$ads_count; $i++) { $pricount += $display_array[$i]; if ($display_rand<=$pricount) {$ads_num=$i;break;} } #####播放广告代码######### $num=0; $flag=0; for($i=0;$i<$lines;$i++){ if((!strcmp(substr($ads_lines[$i],0,7),"display"))){$num++;} if(($num==$ads_num)and($flag==0)){$flag=1;continue;} if(($flag==1)and strcmp($ads_lines[$i][0],"#")){echo $ads_lines[$i];continue;} if(($flag==1)and(!(strcmp($ads_lines[$i][0],"#")))){break;} } ####纪录广告显示次数######### $fp=fopen($log,"a"); fputs($fp,date( "Y-m-d H:i:s " ).getenv("REMOTE_ADDR")."==>".$ads_num."\n"); fclose($fp); } ?>
JavaScript代码有个缺点容易被浏览器的广告拦截插件拦截.
<div id="ads" style="display:none;"> <a href="#"><img src="ad-125x125.png" alt="广告 1" width="125" height="125" /></a> <a href="#"><img src="ad-125x125.png" alt="广告 2" width="125" height="125" /></a> <a href="#"><img src="ad-125x125.png" alt="广告 3" width="125" height="125" /></a> <a href="#"><img src="ad-125x125.png" alt="广告 4" width="125" height="125" /></a> </div> <div id="random-ads" style="display:none;"> </div> <script type="text/javascript"> //<![CDATA[ var source = document.getElementById('ads'); var target = document.getElementById('random-ads'); var ads = source.getElementsByTagName('a'); // 下标数组 var arr = new Array(); for(var i=0; i<ads.length; i++) { arr[i] = i; } // 随机排序 function randomSort(a, b){ var tmp = parseInt((Math.random() + 0.5), 10); return tmp ? a-b : b-a; } // 将老的广告区的节点随机插放到新的广告区 arr.sort(randomSort); for(var i=0; i<arr.length; i++) { target.appendChild(ads[arr[i]].cloneNode(true)); } // 显示新的广告区和移除老的广告区 source.parentNode.removeChild(source); target.style.display = 'block'; //]]> </script>
将下列代码保存为ad.js
var p=3; var q=Math.floor(Math.random()*p+1) switch(q) { case 1: document.writeln("<a href=http://广告链接地址 target=_blank rel="noopener noreferrer"><img src=http://广告图片地址 border=0></a>"); break; case 2: document.writeln("<a href=http://广告链接地址 target=_blank rel="noopener noreferrer"><img src=http://广告图片地址 border=0></a>"); break; case 3: document.writeln("<a href=http://广告链接地址 target=_blank rel="noopener noreferrer"><img src=http://广告图片地址 border=0></a>"); break; }
在要引入随机广告位的地方加入: 比如下面这样
<script type="text/javascript" src="https://www.wpyi.com/js/ad.js"></script>
3个广告位随机排序.
如果想调整这个随机广告位图片数量,只需要修改 var p=3 这里的数字,然后修改 switch 里面的对应的 case 数量即可。
function strToDate(str,ext){ if(str==null || str=='') return; var arys = new Array(); arys = str.split('-'); var newDate = new Date(arys[0],arys[1]-1,arys[2],9,0,0); if(ext){ newDate = new Date(newDate.getTime()+1000*60*60*24); } return newDate; } function showit(str,start,end){ var date = new Date(); var start=strToDate(start); var end=strToDate(end,false); if(date>start && date<end || start==null){ document.write(str); } } var p=3; var q=Math.floor(Math.random()*p+1) switch(q) { case 1: showit("<a href='https://广告链接地址=_blank'><img src='http://广告图片地址' border=0></a>","2017-3-24","2017-3-25"); break; case 2: showit("<a href='https://广告链接地址=_blank'><img src='http://广告图片地址' border=0></a>","2017-3-24","2017-3-25"); break; case 3: showit("<a href='https://广告链接地址=_blank'><img src='http://广告图片地址' border=0></a>","2017-3-24","2017-3-25"); break; }