【发布时间】: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