wordpress 中设置cookie

之前我认为google adsense是基于独立IP,所以我想到一个增加google adsense展示次数的方法。当用户浏览一次文章时,展示的是1,2,3广告,当用户刷新的时候,展示的是4,5,6广告。这样就可以增加google adsense展示次数了。没想到google adsense 展示次数不是基于独立IP的。google 帮助文档说明:

每当某个广告在您的网站上展示一次时,我们就会记录一次广告展示。广告格式不同,广告的展示次数也有所不同;例如,每当您的网站展示竖幅广告时,您就会在报告中看到两次广告展示。另外请注意,任意广告单元中的广告展示次数还会因所展示的是标准文字广告、独占型文字广告还是图片广告而有所不同。

我当时的做法是基于cookie的,把一个计数存在cookie中。每次访问时,会自增1。下面是原型代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>test cookie</title>
</head>

    <body>
    <p>Test</p>

	<?php

	   function setCookieFunction($testVar = 1){
		  $cookieName = 'waitingfyAdIndex';
		  setcookie($cookieName,$testVar,time() + 36000);
	   }
       $adIndex = 1;
       $cookieName = 'waitingfyAdIndex';
       $maxIndex = 3;
       if(!isset($_COOKIE[$cookieName])){//如果未找到cookie的话
       	  setCookieFunction(1);
       }else{
       	  $adIndex = $_COOKIE[$cookieName];
       	  $adIndex++;
       	  if($adIndex == ($maxIndex + 1)){
       	  	$adIndex = 1;
       	  }
		  setCookieFunction($adIndex);
       }
       ?>

	   <?php
       if($adIndex == 1){     //展示广告 1,2,3
	   ?>
	   <div style="width: 50px;height: 50px; background-color: #ccc">
	    1
	   </div>
	<?php 
	   }else if($adIndex == 2){//展示广告 4,5,6
	?>
	   <div style="width: 50px;height: 50px; background-color: #00ff00">
	    2
	   </div>
	<?php 
	   }else if($adIndex == 3){//展示广告 7,8,9
	?>
	   <div style="width: 50px;height: 50px; background-color: #0000ff">
	   3
	   </div>	
	<?php }?>

    </body>

</html>

 

没有想到这块代码在wordpress的主题php页面中不起作用!

查了些资料,说必须把setcookie方法放到functions.php中。像下面的代码:

function set_cookie_function() {
    $cookieName = 'waitingfyAdIndex';
setcookie($cookieName, 1, time()+36000 ,COOKIEPATH, COOKIE_DOMAIN,false);
}
add_action( 'init', 'set_cookie_function');//hook

就是在wordpress中必须填上setcookie的后两个参数,包括cookie作用的路径和域名,而且必须在所有html标签输出之前设置cookie。好吧,我用了这代码,发现还是会出现警告:Cannot modify header information – headers already sent by …

这还不是最大的问题,最大的问题是不支持变量!修改成下面的代码就不行了。

function set_cookie_function($value) {
    $cookieName = 'waitingfyAdIndex';
setcookie($cookieName, $value, time()+36000 ,COOKIEPATH, COOKIE_DOMAIN,false);
}
add_action( 'init', 'set_cookie_function');//hook

到这里我就懒得再用php来设置cookie了。最后用了javascript来设置cookie

<script type="text/javascript">
//javascript 设置cookie
     function setCookie(c_name,value,exdays){
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value;
}
//javascript 得到cookie
function getCookie(c_name){
var c_value = document.cookie;
var c_start = c_value.indexOf(" " + c_name + "=");
if (c_start == -1)
  {
  c_start = c_value.indexOf(c_name + "=");
  }
if (c_start == -1)
  {
  c_value = null;
  }
else
  {
  c_start = c_value.indexOf("=", c_start) + 1;
  var c_end = c_value.indexOf(";", c_start);
  if (c_end == -1)
  {
c_end = c_value.length;
}
c_value = unescape(c_value.substring(c_start,c_end));
}
return c_value;
}
</script>

<?php
       $cookieName = 'waitingfyAdIndex';

       if(!isset($_COOKIE[$cookieName])){?>
	      <script type="text/javascript">
		      setCookie("waitingfyAdIndex",1,1);
		  </script>
<?php }?>	

<script type="text/javascript">
     var maxIndex = 3;
     var adIndex = getCookie("waitingfyAdIndex");
	 adIndex++;
	 if(adIndex == maxIndex + 1){
	    adIndex = 1;
	 }
     setCookie("waitingfyAdIndex",adIndex,1);
</script>		
			<?php
			$single_adIndex = 1;
			if (isset($_COOKIE[$cookieName])) {
			   $single_adIndex = $_COOKIE[$cookieName];
			}?>
        <?php
       if($single_adIndex == 1){     //展示广告 1,2,3
	   ?>
	   <div style="width: 50px;height: 50px; background-color: #ccc">
	    1
	   </div>
	<?php 
	   }else if($single_adIndex == 2){//展示广告 4,5,6
	?>
	   <div style="width: 50px;height: 50px; background-color: #00ff00">
	    2
	   </div>
	<?php 
	   }else if($single_adIndex == 3){//展示广告 7,8,9
	?>
	   <div style="width: 50px;height: 50px; background-color: #0000ff">
	   3
	   </div>	
	<?php }?>

虽然增加广告收入的计划失败了,但也学到了知识,这功能还可以用在用户每次刷新时,展示不同图片,不过我觉得使用随机数也可以达到要求。

http://www.waitingfy.com/?p=734

Tags:

734

Leave a Reply

Name and Email Address are required fields.
Your email will not be published or shared with third parties.