Вместо сохранения полного WC_Product
объекта, представляющего собой сложный огромный и тяжелый массив данных , который нельзя сохранить как метаданные , вам следует просто лучше сохранить идентификатор продукта .
Почему? Потому что идентификатор продукта - это просто целое число (поэтому очень легкое), что позволит вам легко получить WC_Product
Объект из сохраненного идентификатора продукта.
Теперь global $woocommerce
не требуется, а if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
на самом деле не требуется (Если необходимо, добавьте его обратно в функцию) .
Также get_currentuserinfo();
устарел, тоже не нужен и заменен на wp_get_current_user()
.
Вам лучше убедиться, , что текущий идентификатор сообщения относится к типу сообщения "product" . Поэтому попробуйте следующий код:
// save for later
public function save_for_later(){
global $post;
// Check that the current post ID is a product ID and that current user is logged in
if ( is_user_logged_in() && is_a($post, 'WP_Post') && get_post_type() === 'product' ) {
update_user_meta( get_current_user_id(), 'product_id', get_the_id());
}
exit();
}
Теперь для извлечения этих пользовательских метаданных и объекта WC_Product (из идентификатора продукта) , вы будете использовать:
$product_id = get_user_meta( get_current_user_id(), 'product_id', true );
// Get an instance of the WC_Product object from the product ID
$product = wc_get_product( $product_id );
На странице корзины вам может понадобиться только идентификатор продукта, в зависимости от того, что вы пытаетесь сделать. Все должно работать.