2015-06-05 2 views
0

Я создаю услугу подписки, которая автоматически добавляет определенные элементы в корзину пользователя один раз в неделю, без необходимости входа в систему. Проблема в том, что WooCommerce, по-видимому, несут данные о перевозке в нескольких местах, и я не уверен, может служить «ведущей» тележкой, которая будет иметь приоритет. Постоянная тележка, содержащаяся в метателе пользователя, оказывается подчиненной данным сеансовой телеграммы. Однако я не могу понять, как получить/установить данные сеансовой телеграммы без фактического входа в систему через пользователя через браузер.Возможно ли обновлять корзину пользователя программно, зная только идентификатор пользователя?

Должен ли я попытаться каким-то образом подделать логин пользователя, чтобы получить доступ к переменным сеанса? Или есть ли способ сделать это прямо через API WooCommerce?

+0

Почему бы не использовать [Подписки WooCommerce] (http://www.woothemes.com/products/woocommerce-subscriptions/)? – helgatheviking

+0

Я действительно использую это. Я пытаюсь также запускать некоторые обновления корзины на основе своих крючков. Плагин полностью обходит корзину, создавая заказы напрямую. Я бы хотел, чтобы у клиентов была возможность изменить свои заказы, прежде чем они пройдут автоматически. –

+0

Я уверен, что подписки вообще не обходят корзину. Может быть настройка, которая автоматически перенаправляется на проверку, которую вы можете отключить, но элемент по-прежнему добавляется в корзину. Что именно ты пытаешься сделать? – helgatheviking

ответ

0

Итак, я понял, что данные сеанса хранятся как опция сайта в метафайлах опций, и если я установил как постоянную телеграмму, так и сеанс на ту же самую вещь, тогда она всегда будет загружать правильную информацию. Вот отрывок, который показывает, как сделать это с помощью сериализации: функция

function add_products_programmatically($user_id) { 

    // Get the current session data and saved cart 
    $wc_session_data = get_option('_wc_session_'.$user_id); 

    // Get the persistent cart 
    $full_user_meta = get_user_meta($user_id,'_woocommerce_persistent_cart', true); 

    // Create a new WC_Cart instance and add products programmatically 
    $cart = get_new_cart_with_products(); 

    // If there is a current session cart, overwrite it with the new cart 
    if($wc_session_data) { 
     $wc_session_data['cart'] = serialize($cart->cart_contents); 
     update_option('_wc_session_'.$user_id, $wc_session_data); 
    } 

    // Overwrite the persistent cart with the new cart data 
    $full_user_meta['cart'] = $cart->cart_contents; 
    update_user_meta($user_id, '_woocommerce_persistent_cart', $full_user_meta); 
} 

В get_new_cart_with_products() просто создает объект новый WC_Cart() и добавление элементов, а затем возвращая объект корзины.

Смежные вопросы