在 wordpress 中的任意位置点击打开广告

Open ad clicking anywhere in wordpress

我有 wordpress 网站,我正在使用这个脚本

onclick="<?php if(!isset($_COOKIE['visited'])){echo"window.open('http://link', '_blank')"; setcookie("visited", "1", time()+3600*24); header("Refresh:0");} ?>"

在 body 行中。所以这意味着我正在使用

<body <?php body_class(); ?> onclick="<?php if(!isset($_COOKIE['visited'])){echo"window.open('http://link', '_blank')"; setcookie("visited", "1", time()+3600*24); header("Refresh:0");} ?>">

在主题的 header.php 文件上。

但它会在每次点击时打开 link。 我只想打开它一次,直到我刷新页面或打开新页面。 我该怎么做。 请帮忙。 提前致谢。

你好。

setcookie function reference 所说:

cookies must be sent before any output from your script


第一个解决方案

你可以把这个加在最上面哦header.php:

<?php
$onclick = '';
if(!isset($_COOKIE['visited'])) {
    setcookie('visited', '1', time()+3600*24, COOKIEPATH, COOKIE_DOMAIN);
    $onclick = 'onclick="window.open(\'http://link\', \'_blank\')"';
}
?>

Update:我添加了常量 COOKIEPATHCOOKIE_DOMAIN,例如 explained here.

这是你的 body 标签:

<body <?php body_class(); ?> <?php echo $onclick; ?>>

更好的解决方案

先前的解决方案不能确保在发送任何输出之前设置 cookie(在调用 get_header() 之前,您的模板文件中可能有一些字符,或者插件可以添加一些东西)。

相反,您应该向始终在任何输出之前调用的 Wordpress 挂钩添加一个操作(如 init)。

所以尝试添加到您的 functions.php 文件:

add_action('init', 'set_visited_cookie');
function set_visited_cookie() {
    if (!isset($_COOKIE['visited'])) {
        setcookie('visited', '1', strtotime('+1 day'), COOKIEPATH, COOKIE_DOMAIN);
    }
}

至于你的 body 标签:

<body <?php body_class(); ?> <?php if(!isset($_COOKIE['visited'])): ?> onclick="window.open('http://link', '_blank')" <?php endif; ?>>