Wordpress / WC - Обновление сообщения / мета продукта перед загрузкой страницы - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь создать функциональность в моем магазине WooCommerce, чтобы обновлять количество товаров при нажатии на них / страница их продукта загружается на основе внешней базы данных и API. Я успешно создал функцию, используя такой хук:

add_action('woocommerce_before_single_product', 'update_product_stock');
function update_product_stock(){
  global $product;
  $sku = $product -> get_sku();
  //code for updating based on $sku
}

Таким образом, когда загружается страница для продукта, это корректно меняет сумму запаса для продукта. Проблема в том, что это изменение не отражается, поскольку страница загружается / отображается. Страница должна быть обновлена ​​или повторно посещена для новой суммы запаса, которая будет показана. Я также пытался использовать хук 'init' и хук 'template_redirect', но они не позволяют мне получить доступ к продукту, чтобы получить информацию id / sku / other для отправки в API для извлечения данных.

Кто-нибудь знает, как мне получить информацию об элементе товара, обновить метаданные поста (я использую wc_update_product_stock ()) и отразить эти изменения в просмотре страницы без перезагрузки? Я думаю, что в конечном итоге мне также придется реализовать это на странице результатов поиска, но я хочу сначала отсортировать это.

1 Ответ

0 голосов
/ 12 ноября 2018

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

//this hook runs before the page/product loop
add_action('storefront_before_site', 'update_product_stock');

function update_product_stock(){
  //since this now runs before the standard post loop,
  //need a different way to access the post.
  //use page id to differentiate between products and other shop pages.
  $page_id = get_queried_object_id();

  //my code for fetching stock here
  $stock_num_to_set = determine_new_stock();

  $product = new WC_Product($page_id);

  //check that the page is indeed a product page 
  //(i use the sku, use your own preferred method)
  $product_sku = get_post_meta($page_id, '_sku', true);

  if($product_sku){
    //update using woocommerce product update.
    //now this is the info that will be fetched as the post is loaded normally
    wc_update_product_stock($product, $stock_num_to_set);
  }
}

Спасибо этому пользователю за информацию по схожему вопросу: https://stackoverflow.com/a/3127776/6581190

...