在WordPress插件中设置cookie,cookie会自动删除

时间:2015-11-10 08:18:26

标签: php wordpress cookies wordpress-plugin

我正在尝试使用WordPress插件开发练习并遇到一些小问题。

该插件旨在在首页的小部件中显示简单的轮询。一旦访问者投票,我使用setcookie删除包含他的投票30天的cookie,并使用一些简单的代码来更改窗口小部件,以便显示结果,并且用户不能再次投票,直到提出新的投票。问题是,投票仍然可能,结果永远不会显示。使用开发人员的工具查看日志,我发现cookie在客户端浏览器上的第二个被删除。有人知道为什么,以及我如何纠正这个问题?

这是代码。首先,动作挂钩:

    public function __construct()
{
    parent::__construct('poll_plugin', __('Polls', 'poll_plugin'), array('description' => __('Simple poll widget', 'poll_plugin')));
    add_action('init', array($this, 'save_votes'));
}

然后,实际行动:

public function save_votes()
{
    global $wpdb;
    /*Cookie setting, 30 days expiration */
    if ( isset($_POST['option']) && !isset($_COOKIE['Poll_Votes']))
    {
        unset($_COOKIE['Poll_Votes']);
        setcookie('Poll_Votes', $choix, 30 * DAYS_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN);

        $choix = $_POST['option'];
        $id_choix = $wpdb->get_var("SELECT id FROM {$wpdb->prefix}poll_options WHERE label = '$choix'");
        $wpdb->query("UPDATE {$wpdb->prefix}poll_results SET total = total+1 WHERE option_id = '$id_choix'");
    };
    /*Testing the presence of a new poll */
    $vote = $_COOKIE['Poll_Votes'];
    /*If the cookie's value isn't found in the db, the poll's changed, so we reset the cookie*/
    if (is_null($wpdb->get_var("SELECT * FROM {$wpdb->prefix}poll_options WHERE label = '$vote'")))
    {
        setcookie('Poll_Votes', '', time()-3600);
    }
}

快速注意到这里,我已经尝试评论用于取消设置cookie的行,它没有改变任何内容。

提到cookie的唯一另一个时间是通过$ _COOKIE全局,在isset()中。

最后,请原谅我的英语,我是法国人:)

0 个答案:

没有答案