Мы создали пользовательские интерфейсы wp / woocommerce rest для собственного реагирующего мобильного приложения. Но у нас есть проблемы с операциями с корзиной woocommerce. Корзина смешивается с гостями и вошедшими в систему пользователями. Мы не знаем, как мы можем создать уникальную корзину для всех мобильных устройств / клиентов. Мы отправляем запросы с помощью axios от Reaction native.
Я думаю, что проблема может быть связана со следующим кодом. Мы используем этот код, чтобы заставить API работать. Когда axios (реагирует на родную) отправку запросов, мы устанавливаем с параметромCredentials значение true для кокисов.
https://wordpress.org/support/topic/fatal-error-after-update-3-6-2/
https://barn2.co.uk/managing-cart-rest-api-woocommerce-3-6/
private function maybe_load_cart()
{
if (version_compare(WC_VERSION, '3.6.0', '>=') && WC()->is_rest_api_request()) {
require_once(WC_ABSPATH . 'includes/wc-cart-functions.php');
require_once(WC_ABSPATH . 'includes/wc-notice-functions.php');
require_once(WC_ABSPATH . 'includes/class-wc-checkout.php');
if (null === WC()->session) {
$session_class = apply_filters('woocommerce_session_handler', 'WC_Session_Handler');
if (false === strpos($session_class, '\\')) {
$session_class = '\\' . $session_class;
}
WC()->session = new $session_class();
WC()->session->init();
}
if (is_null(WC()->customer)) {
if (is_user_logged_in()) {
WC()->customer = new WC_Customer(get_current_user_id());
} else {
//get_current_user_id() result is 0 if not logged-in
WC()->customer = new WC_Customer(get_current_user_id(), true);
}
add_action('shutdown', array( WC()->customer, 'save' ), 10);
}
if (null === WC()->cart) {
WC()->cart = new WC_Cart();
}
}
}
Мы пытались отключить постоянную картуно не работает.
https://github.com/woocommerce/woocommerce/pull/19027
add_filter( 'woocommerce_persistent_cart_enabled', function(){return false;} );
Мы пытались заблокировать постоянную корзину, но не работали.
function remove_persistent_cart($value, $id, $key) {
if ($key == '_woocommerce_persistent_cart_' . get_current_blog_id()) {
return false;
}
return $value;
}
add_filter('get_user_metadata', 'remove_persistent_cart', 10, 3);
add_filter('update_user_metadata', 'remove_persistent_cart', 10, 3);
add_filter('add_user_metadata', 'remove_persistent_cart', 10);
Мы пытались использовать уникальный user_id, если пользователь не вошел в систему, ноне работает.
WC()->customer = new WC_Customer(WC()->session->generate_customer_id(), true);
Мы пытались использовать собственный сеанс php для корзины, но у нас ничего не получилось. Его смешивание с сеансом woocommerce при создании нового объекта WC_Cart.
Подводя итог, нам нужно создать уникальную корзину для всех уникальных клиентов (устройств). Уникальный идентификатор может быть идентификатором устройства или мы можем сохранить уникальный ключ в нативном сеансе php для этого. Но мы не знаем, как мы можем создать уникальную корзину, независимую от операций входа и выхода.