PHP:根据 Google Adword 广告系列关键字 URL 创建 cookie

PHP: create a cookie from Google Adword campaign keyword URL

我在 Wordpress 站点上使用 PHP 来执行此操作。如果您认为 JavaScript 或 jQuery 更好,请告诉我。

我们的合作伙伴之一是 运行 Google Google 我们的 Adword 广告系列。我无权访问确切的活动 URL,因此我无法根据对活动 URL 的了解来创建 cookie。当用户在我们的网站上提交表单时,企业主希望跟踪用户来自哪些活动。我的计划:

  1. 我想 set/name 基于 Google Adword 广告系列关键字 URL 的 cookie。
  2. 如果从之前的活动中设置了 cookie,并且用户点击了新的活动,我想删除之前的活动 cookie(如果存在)并从新的活动中创建 cookie。
  3. 如果设置了此 cookie - 并且它们在表单页面上 - 我想在 value 属性中加载带有 cookie 名称的隐藏输入 - 并且在提交表单时,该隐藏字段会告诉我们哪个活动他们来自.

这是我们的合作伙伴 URL 使用的 Adword 广告系列示例:

?UTM_keyword=field%20service%20software_phrase&UTM_source=Paid%20Search&gclid=EAIaI

我想做的是抓住上面 URL 在“?UTM_keyword=”和“&UTM_source=”之间的部分 - 在这种情况下,它会是 "field%20service%20software_phrase"。

这是我目前开发的代码:

header.php - 在每页 <!DOCTYPE html> 之后

<?php
// load content-utm.php if the URI contains UTM_keyword
    if (strpos($_SERVER['REQUEST_URI'], "UTM_keyword")){
// load content-utm.php
        get_template_part( 'content', 'utm' );
    }
?>

内容-utm.php

<?php
    $uriSegments = parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY);
// strip out UTM_keyword=
    $uriSegments2 = substr($uriSegments, 12);
// strip out everything after &UTM_source= including &UTM_source=
    $uriSegments3 = substr($uriSegments2, 0, strpos($uriSegments2, "&UTM_source="));
    $_SESSION['uriName'] = $uriSegments3;
// create a cookie
    if (strpos($_SERVER['REQUEST_URI'], $uriSegments3)){
        $cookie_name = $uriSegments3;
        $cookie_value = "UTM";
// make it a session cookie that expires after the browser is closed
        setcookie($cookie_name, $cookie_value, 0, "/");
    }
// I know how to remove a cookie but I'm not sure how I would remove THIS type of cookie
?>

表格-page.php

<?php
// if the cookie is set
    if (isset($_COOKIE[$uriSegments3])){
// load content-deluxe-cookie-tracking.php
        get_template_part( 'partners/content', 'deluxe-cookie-tracking' );
    } 
?>

content-deluxe-cookie-tracking.php

<input type="hidden" id="1234567890" name="1234567890" value="<?php echo $uriSegments3 = $_SESSION['uriName']; ?>">

到目前为止:

  1. 我已经能够创建一个 cookie,它在浏览器打开时一直存在,在浏览器关闭时过期 - 这正是我想要的。
  2. 如果活动 URL 在地址栏中,则 form-page.php returns 中的 "if" 语句为真, content-deluxe-cookie-tracking.php 加载并且输入 value="<?php echo $uriSegments3 = $_SESSION['uriName']; ?>" 是 cookie 名称。
  3. 但是,如果活动在另一个页面上并且用户到达没有活动的表单页面 URL,那么 form-page.php [=104] 中的 "if" 语句=]假的, content-deluxe-cookie-tracking.php 未加载 - 我已检查以确保 cookie 存在。

因此,例如:

www.mysitename.com/form-page/?UTM_keyword=field%20service%20software_phrase&UTM_source=Paid%20Search&gclid=EAIaI

有效,但是:

www.mysitename.com/form-page/

不起作用,即使在另一个页面上设置了 cookie,例如:

www.mysitename.com/another-page/?UTM_keyword=field%20service%20software_phrase&UTM_source=Paid%20Search&gclid=EAIaI

我自己的问题的最终解决方案是使用 php $_SESSION 而不是 cookie。通过这个解决方案,我可以创建一个会话:

  1. 可以将活动关键字数据保存为命名会话
  2. 只要浏览器打开,会话就会持续
  3. 会话在每个页面上持续存在,因此用户可以转到其他页面
  4. 如果站点在新选项卡中打开,会话将持续存在
  5. 会话用于加载隐藏的输入并填充该隐藏的输入值属性,以便它可以与表单一起发送到 CRM 软件
  6. 每次使用新的活动时,会话都会更新新的活动关键字信息。可以在任何页面上创建活动并在任何页面上对其进行跟踪。

header.php

<?php
/**
 * Header
*/
session_start();
?>
<!DOCTYPE html>
<?php
// if the URI contains UTM_keyword
    if (strpos($_SERVER['REQUEST_URI'], "UTM_keyword")){
// load content-utm.php
        get_template_part( 'content', 'utm' );
    }
?>

content-utm.php

<?php
// parse the URI after the question mark (?)
    $uriSegments = parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY);
// strip out UTM_keyword=
    $uriSegments2 = substr($uriSegments, 12);
// strip out everything after &UTM_source= including &UTM_source=
    $uriSegments3 = substr($uriSegments2, 0, strpos($uriSegments2, "&UTM_source="));
// name the session I can reference later
    $_SESSION['uriName'] = $uriSegments3;
?>

form-page.php

<?php
// if the session named uriName is set
    if (isset(isset($_SESSION["uriName"])){
// load content-deluxe-cookie-tracking.php
        get_template_part( 'partners/content', 'deluxe-cookie-tracking' );
    } 
?>

content-deluxe-cookie-tracking.php

// echo the value of the session in the input
<input type="hidden" id="1234567890" name="1234567890" value="<?php echo $uriSegments3 = $_SESSION['uriName']; ?>">

提交表单,数据最终出现在为检索此数据而创建的 CRM 字段中。