2013-12-18 128 views
1

我已经为wordpress创建了一个插件。 下面是一个示例代码。该代码运行良好,并成功将数据存储在cookie中。但问题是当我刷新页面时,旧数据丢失,并再次写入相同的数据...WordPress的页面丢失饼干

下面的代码块在插件文件中。

if (!isset($_COOKIE['selection_list'])) { 
     setcookie('selection_list', '', time() + 3600, "/dev/"); 
    } 

的以下代码块是在AJAX调用的URL文件,该数据被发送到使用AJAX

if (!isset($_COOKIE['selection_list'])) { 
$_COOKIE['selection_list'] = array(); 
} 

array_push($_COOKIE['selection_list'], "some_test_data"); 

和在此之后,文件,数组的长度或数组元素的值是送回。 每次刷新页面时,都应该将数据推入数组中,并将数组大小增加一。但实际上它不会...... :(。它覆盖上面的同一行,并且数组长度总是保持为1,不会增加。:( 请让我知道是否有一些我在代码中做错了? 我的网站网址http://flintimm.cluster013.ovh.net/dev/

更新::

这里是插件文件

<?php 
/* 
Plugin Name: Selections List 
Plugin URI: 
Description: Displays a list of your selected properties 
Version: 1.23 
Author: Muhammad Sohail 
Author URI: https://www.elance.com/s/sohailx2x/10183/ 
*/ 

function selection_list_start($post_id) { 
if (is_single()) { // when a single post page is opened 
    ?> 
    <script src='<?php echo plugins_url(); ?>/selections-list/script.js'> </script> 
    <link rel='stylesheet' type='text/css' href='<?php echo plugins_url(); ?>/selections-list/style.css' /> 
    <?php 
    $property_ID = get_the_ID(); 
    $content = get_the_content(); 

    if (!isset($_COOKIE['selection_list'])) { 
     setcookie('selection_list', '', time() + 3600, "/"); 
    } 

    $post = get_post($property_ID); 
    $meta_field = get_post_meta($property_ID); 
     $post_title = $post->post_title; 
     $post_link = $post->guid; 
     $property_price = strtolower($meta_field['REAL_EXPERT_property_price'][0]); 

    $found = 0; 
    for($index = 0; $index < count($_SESSION['selection_list']); $index++) { 
     if ($property_ID == $_SESSION['selection_list'][$index]) { 
      $found = 1; 
     } 
    } 
    if ($found) { 
     $content .= "<br /><span id=\"add-to-my-selection\" class=\"meta-print visible-desktop\">Ajouté à la sélection</span>"; 
    } else { 
     $content .= "<br /><span id=\"add-to-my-selection\" class=\"meta-print visible-desktop\">Ajouter à ma sélection</span>"; 
    } 
    $content = $content . "<input type='hidden' id='property-ID' value = '$property_ID' />"; 
    $content = $content . "<input type='hidden' id='post-title' value = '$post_title' />"; 
    $content = $content . "<input type='hidden' id='post-link' value = '$post_link' />"; 
    $content = $content . "<input type='hidden' id='property-price' value = '$property_price' />"; 
    $content = $content . "<input type='hidden' id='cookieee' value = '" . $_COOKIE['my_cookie'][0] . "' />"; 

    return $content;} add_action('the_content', 'selection_list_start'); ?> 

的代码,这里是AJAX URL路径文件中的代码...

<?php 
session_start(); 
$str = ""; 
$property_id = $_POST['property_id']; 
if (!isset($_COOKIE['selection_list'])) { 
    $_COOKIE['selection_list'] = array(); 
} 

array_push($_COOKIE['selection_list'], $_POST['property_id']); // this doesn't increment the array size with page refresh... 
array_push($_SESSION['selection_list'], $_POST['property_id']); // this increments the array size with page refresh... 

if (isset($_POST['session']) && $_POST['session'] == "start" && $_POST['task'] == "add") { 
    if (isset($_SESSION['selection_list'])) { 
     array_push($_SESSION['selection_list'], $property_id); 
    } else { 
     $_SESSION['selection_list'] = array(); 
     array_push($_SESSION['selection_list'], $property_id); 
    } 

    $str = ""; 
    for ($counter = 0; $counter < count($_SESSION['selection_list']); $counter++) { 
     $str .= $_SESSION['selection_list'][$counter] . "<br />"; 
    } 
    //echo $str; 
    echo count($_SESSION['selection_list']); 
} 

if (isset($_POST['session']) && $_POST['session'] == "get" && count($_SESSION['selection_list']) > 0) { 
    if (isset($_SESSION['selection_list'])) { 

    echo count($_SESSION['selection_list']) . " | " . count($_COOKIE['selection_list']); 
    // when I refresh page, the above line prints following output with each page refresh 
    /* 
    1 | 1 
    2 | 1 
    3 | 1 
    4 | 1 
    ... 
    and so on... 
    */ 

    } 
} else { 
    echo "Not set..."; 
} 

if (isset($_POST['session']) && $_POST['session'] == "end") { // if session start is not passed, then session end will be passed 
    if (isset($_SESSION['selection_list'])) { 
     session_destroy(); 
     echo "Session destroyed"; 
    } else { 
     echo "No session"; 
    } 
} 

?> 

ajax运行良好,正确传递数据,并正确显示数据。唯一的问题是Cookie。

+0

尝试接收响应的ajax文件位于同一个目录中?例如:/dev/(anything-ajax.php)文件? – Shazzad

+0

最近我看到一个问题,Ajax调用不与主站点共享Cookie,我找到的原因是Ajax从Javascript调用,它们的路径与普通浏览器不同。坦率地说,我没有记得我是否在我的网站上解决了这个问题,但你可以朝这个方向进行搜索。 –

+0

刚刚为你找到了一些东西:http://stackoverflow.com/questions/8854816/keeping-the-cookie-after-a-cross-domain-ajax-request –

回答

0

尝试在您的插件中更改setcookie('selection_list', '', time() + 3600, "/dev/");$_COOKIE['selection_list'] = array();

+0

感谢您的答复。我尝试过,但没有奏效。 :-( –

+0

我需要看到一个更全球的背景,你能分享更多吗? –

+0

感谢您对帮助我感兴趣,我已经更新了上面的帖子。 –