【问题标题】:PHP: create a cookie from Google Adword campaign keyword URLPHP:从 Google Adword 广告系列关键字 URL 创建 cookie
【发布时间】:2018-08-30 22:00:24
【问题描述】:

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

我们的一个合作伙伴正在为我们投放 Google Google Adword 广告系列。我无权访问确切的广告系列 URL,因此我无法根据知道的广告系列 URL 创建 cookie。企业主希望在他们在我们的网站上提交表单时跟踪哪些活动用户来自。我的计划:

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

以下是我们的合作伙伴正在使用的 Adword 广告系列 URL 示例:

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

我想要做的是在“?UTM_keyword =”和“&UTM_source =”之间获取上述URL的部分 - 在这种情况下,它将是“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
?>

form-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 中的“if”语句返回 true, content-deluxe-cookie-tracking.php 加载,输入 value="&lt;?php echo $uriSegments3 = $_SESSION['uriName']; ?&gt;" 是 cookie 名称。
  3. 但是,如果活动在另一个页面上并且用户进入没有活动 URL 的表单页面,则 form-page.php 中的“if”语句返回 false, 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

【问题讨论】:

  • 现在我正在查看 stackoverflow.com/questions/27758053/... 我想我需要: session_start();在 header.php 的开头,然后在 content.php 中,我需要测试 $_SESSION["uriName"]) 是否为真,而不是查看 cookie 是否存在。为 uriName 创建一个会话并在整个站点上跟踪它就可以了。我的最终解决方案不会包含 cookie。

标签: php wordpress cookies input google-ads-api


【解决方案1】:

我自己的问题的最终解决方案是使用 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' );
    }
?>

内容-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 字段中。

【讨论】:

  • 非常聪明,我今天打算编写一个像你这样的解决方案。在开始之前,我决定看看是否有人做过类似的事情,我相信你的解决方案是一个聪明的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多