Добавить текущий продукт к текущим зарегистрированным метаданным пользователя - PullRequest
1 голос
/ 09 апреля 2019

На странице продукта WooCommerce я пытаюсь добавить текущий продукт в качестве метаданных нового пользователя.Я правильно делаю?

Тогда как я могу получить метаданные этого продукта на странице корзины?

// save for later
public function save_for_later(){
    if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { 
        global $woocommerce;
        // get user details
        global $current_user;
        get_currentuserinfo();

        $product = wc_get_product( get_the_ID() );;

        if (is_user_logged_in())
        {
            $user_id = $current_user->ID;
            $meta_key = 'product';
            $meta_value = $product;
            update_user_meta( $user_id, $meta_key, $meta_value);
        }
        exit();
    }
}

1 Ответ

1 голос
/ 09 апреля 2019

Вместо сохранения полного 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 );

На странице корзины вам может понадобиться только идентификатор продукта, в зависимости от того, что вы пытаетесь сделать. Все должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...