【问题标题】:WooCommerce plugin - AJAX and $_SESSION issuesWooCommerce 插件 - AJAX 和 $_SESSION 问题
【发布时间】:2016-08-18 22:46:12
【问题描述】:

我正在尝试构建一个插件,将一些自定义数据添加到 WooCommerce 订单中。

基本上我是从一个自定义按钮加载一个特定的产品页面,其中我设置了一个 url 变量 (&my_post_var={INTEGER})。然后在产品页面中处理此 var,显示 WordPress 中可用的一些特定信息,并按预期工作。

从这里开始,在按下添加到购物车后,一些自定义数据被推送到购物车会话。 AJAX jQuery 和 PHP 回调都正确运行,jQuery 响应也使用 PHP $_SESSION 变量正确填充。

问题是在那之后,当购物车页面显示时,显示的数据是来自上一个&my_post_var={INTEGER}的数据,而不是最后一个值正在通过。

我没有使用任何缓存插件,这是本地开发的 wordpress 安装。

有人可以帮我找出这里可能出了什么问题吗?

这部分代码可能更贴切:

function __construct() {

    // AJAX callback    
    function my_ajax_custom_data_callback_inline () {
        session_start();
        print_r ($_POST);

        write_log ( 'Data inside AJAX callback: ');
        write_log ( ' - DEBUG: _POST data: '. $_POST['my_post_data'][0] ); // This outputs the expected value

        $_SESSION['my_meta_data'] = $_POST['my_post_data'];
        print_r ($_SESSION);

        write_log ( ' - DEBUG: _SESSION DATA: ' . $_SESSION['my_meta_data'][0] ); // This outputs the expected value

        wp_die();
    }

    // AJAX hooks
    add_action('wp_ajax_' . 'my_custom_data', 'my_ajax_custom_data_callback_inline', 1);
    add_action('wp_ajax_nopriv_' . 'my_custom_data', 'my_ajax_custom_data_callback_inline', 1);


    if ( isset( $_SESSION['my_meta_data'] ) ) { // this is not being verified as TRUE

        add_filter( 'woocommerce_add_cart_item_data', 'my_add_cart_item_data', 10, 2 );

        add_filter( 'woocommerce_get_cart_item_from_session', 'my_get_cart_items_from_session', 10, 3 );

        add_filter( 'woocommerce_get_item_data', 'my_get_item_data',  10, 2 );

        add_action('woocommerce_add_order_item_meta', 'my_add_values_to_order_item_meta',10,2 );

        add_action('woocommerce_before_cart_item_quantity_zero', 'my_remove_user_custom_data',10,1 );

    }

}

非常感谢

【问题讨论】:

    标签: ajax session wordpress woocommerce


    【解决方案1】:

    我想我找到了一种排序方法,如果结果不稳定,我会回到这个问题。

    基本上我在进行两个不同的 session_start() 调用,一个在 ajax 回调中(如 OP 中所示),另一个在 woocommerce_add_cart_item_data 过滤器函数中。

    __construct() 启动后立即摆脱这两个调用并用一个调用替换它们使其正常工作,即使我不知道是否有任何重要的警告有了这个。

    【讨论】:

      猜你喜欢
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 2020-08-31
      • 1970-01-01
      • 2018-07-27
      相关资源
      最近更新 更多