Наличие сессии Woocommerce после оформления заказа? - PullRequest
1 голос
/ 19 марта 2019

В настоящее время я использую сеанс Woocommerce для сохранения информации, которую пользователь вводит на странице корзины, которая влияет на комиссию, добавленную к транзакции.

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

Я подумал, что woocommerce_thankyou будет хорошим подспорьем в использовании, но, к сожалению, сессия, кажется, доступна только в половине случаев.

Есть ли какие-нибудь более удобные хуки, чтобы я мог подтвердить, что покупка была завершена и информация о сеансе будет доступна?

1 Ответ

0 голосов
/ 19 марта 2019

Вам необходимо сохранить эти данные сеанса как метаданные пользовательского заказа , чтобы иметь возможность использовать их впоследствии (замените my_key в приведенном ниже коде на правильный ключ сеанса):

// Add custom order meta data with temporary data from WC_Session
add_action( 'woocommerce_checkout_create_order', 'add_session_data_as_custom_order_meta_data', 10, 2 );
function add_session_data_as_custom_order_meta_data( $order, $data ) {
    if ( $session_data = WC()->session->get('my_key') ) {
         $order->update_meta_data( '_session_data', $session_data );
    }
}

Код сохраняется в файле function.php вашей активной дочерней темы (или темы).Протестировано и работает.


Затем для доступа к данным вы будете использовать WC_Data метод get_meta() для WC_Order объекта:

$session_data = $order->get_meta('_session_data');

или также с помощью get_post_meta() функция из определенного идентификатора заказа :

$session_data = get_post_meta( $order_id, '_session_data', true );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...