Wordpress - 页面根据用户的IP重定向

时间:2014-05-13 14:29:56

标签: php wordpress cookies

我提出了以下解决方案:

CREATE TABLE logger(   id int(11)NOT NULL AUTO_INCREMENT,   ip int(11)NOT NULL,   landing varchar(16)DEFAULT NULL,   updated时间戳NOT NOT DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,   主要关键(id) )ENGINE = InnoDB DEFAULT CHARSET = latin1

查看条目是否存在 选择id,从logger登陆,其中ip = INET_ATON('10 .0.5.9')并更新> date_add(CURRENT_TIMESTAMP,间隔-2天)按id desc limit 1排序;

如果存在更新。这将自动更新更新的字段 更新记录器设置landing ='landing',其中id = 1;

如果不存在,请添加条目 插入记录器(ip,登陆)值(INET_ATON('10 .0.5.9'),'/');

任何人都可以帮助我将php位添加到我的标题中,因为我已经成功地对MySQL位进行了排序。

先谢谢你们!

2 个答案:

答案 0 :(得分:2)

一个好的解决方案是使用一个特殊的网址,您可以通过电子邮件广告系列链接到该网址,其中包含真正的"地址被添加为查询参数:

将重定向到http://example.com/foo的示例 http://example.com/campaign.php?forward_to=http%3A%2F%2Fexample.com%2Ffoo&campaign=bar

在该脚本中,您设置一个cookie并转发到实际地址

<?php 
   setcookie('campaign', $_GET['campaign']);
   header('Location: ' + $_GET['forward_to']);  
?>

请注意,此脚本需要位于同一个域中。您也可以在没有重定向的情况下执行此操作,只需在functions.php中设置一个钩子并查找campaign查询sting参数并根据该参数提供不同的样式表。例如:

(这假设您在mytheme/styles/ campaign-1.css, campaign-2.css中有特定于广告系列的样式表

// in /functions.php

/**
* Sets cookie if 'campaign' var is passed in url
*/
function get_campaign_code($query_vars) {
    if (isset($query_vars['campaign'])) {
        setcookie('campaign_code', $query_vars['campaign']);
    }
}

add_filter('query_vars', 'get_campaign_code');

/**
* Enqueue a campaign specific stylesheet if $_COOKIE['campaign_code'] is available
*/
function enqueue_campaign_stylesheet() {

    $cid = $_COOKIE['campaign_code'];

    if ( $_COOKIE['campaign_code'] ) {
         // creates uri to campaign specific  
         $src = sprintf('%s/styles/campaign-%d.css', 
                    get_template_directory_uri(),
                    $cid
                    );
         wp_enqueue_style( 'campaign_css', $src);
    }  
}

add_action( 'after_setup_theme', 'function_name');

答案 1 :(得分:1)

您不应该使用ip来识别用户,而是使用会话(即使用cookie)

<?php
session_start();

//Set the correct page if not set already
if(!isset($_SESSION['page']){
  if(userCameFromEmail)
    $_SESSION['page'] = "someUrl1";
  else if(userCameFromTV)
    $_SESSION['page'] = "someUrl2";
  else if(userCameFromCard)
    $_SESSION['page'] = "someUrl3";
}

//Redirect
header("Location: " . $_SESSION['page']);

?>

这样,只要他保留cookie,用户就会看到他第一次看到的同一页面。请注意,这并不禁止访问其他网址。如果您不想限制访问更加困难。您可以在每张名片中添加不同的随机代码,并在页面中提出要求。同样适用于电子邮件。根据定义,电视页面是公开的,我猜你不想限制对它的访问。